DbSeek eventualmente não funciona?? Será??

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

DbSeek eventualmente não funciona?? Será??

Mensagem por Nascimento »

tembem me confundo sebre HBNETIO, e LetoDB ,ainda nao usei nem um dos 2 por nao entender bem
aqui no forum tem muitas informaçoes mais um pouco desencontradas
seria legal um topico tratando basicamente sobre os 2 com exemplos funcionais mesmo que pequenos

seria bom fica a dica
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

DbSeek eventualmente não funciona?? Será??

Mensagem por Itamar M. Lins Jr. »

Ola!
Melhor perguntar o que não sabe, caso tenha faltado alguma informação.
O que está faltando no caso do Letodb ? que é o que eu uso, entrar lá no forum "Banco de Dados" e faça sua pergunta.

https://pctoledo.org/forum/viewto ... 42&t=15108 fora outros posts.

Lembrando que este postagem é velha, mas a explicação é atual. E mudei para o Letodbf que é um fork.
https://pctoledo.org/forum/viewto ... 42&t=18083

O NetIO é parecido, e tem exemplos diversos no \contrib\hbnetio está no Harbour, faz parte dele!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

DbSeek eventualmente não funciona?? Será??

Mensagem por deividdjs »

tarde amigos....

tenho uma base de datos que preciso atualizar ... e algo q sempre fiz e agora não funciona nem com "REZA" ...

preciso buscar tendo da base .. se já existir eu ignoro e não existir em crio .. e o seek nem DBSEEK encontra minha pesquisa .... segue o codigo :

Código: Selecionar todos

[code]
		if file("id.dbf")  //.and. curdir() == ("controle_")  
		
		   vdbf := "id.dbf"
		   id := {}
		
		   aadd(id,{"c_cod","C", 08, 0})
		   aadd(id,{"c_seq","C", 12, 0})
		
		   criadbf()
		   Ver_Dbf(vdbf,id)

         matriz_id:={} // MATRIZ DADOS DBF  // NOME DO CODIGO + QUANTIDADE DE CARACTERES

         AADD(matriz_id,{"codcli",5})
         AADD(matriz_id,{"codfor",4})
         AADD(matriz_id,{"codven",4})
         AADD(matriz_id,{"codgru",3})
         AADD(matriz_id,{"codpro",6})
         AADD(matriz_id,{"codgrd",6})
         AADD(matriz_id,{"regmoe",8})
         AADD(matriz_id,{"regmos",8})
         AADD(matriz_id,{"codrec",1})
         AADD(matriz_id,{"codpag",1})
         AADD(matriz_id,{"pedcmp",6})
         AADD(matriz_id,{"pcptmp",8})
         AADD(matriz_id,{"codfact",2})
         AADD(matriz_id,{"seqfact",10})
         AADD(matriz_id,{"seqdes",10})
         							  
		   use id alias id new
		   index on c_cod tag idcx_tmp
	   				
			SELECT ID
			DBGOTOP()
			
			FOR A:=1 TO LEN(matriz_id)
             
				 IF ID->(ORDSETFOCUS("IDCX_TMP"),!DBSEEK(c_cod==matriz_id[A,1])) 

				    append blank                  
			       replace c_cod with matriz_id[A,1],;    
			               c_seq with strzero(val("0")+1,matriz_id[A,2])
			    ENDIF    
      	
			NEXT

			DBEDIT()

		   id->(dbclosearea())
		 
		endif
[/code]

a principio eu exclui da base somente o 'codfor' e a atualização deveria criar somente ele .. e o sistema ignora a condição e cria todos novamente .. onde eu errei aqui ?? uma luz por favor ... obrigado amigos ... abraços!
Anexos
base
base
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

DbSeek eventualmente não funciona?? Será??

Mensagem por alxsts »

Ola!

O problema está na expressão de busca... está buscando um valor lógico em um índice carácter.
deividdjs escreveu:DBSEEK(c_cod==matriz_id[A,1])
Isto vai resultar .T. ou .F., que nunca vai existir no índice.

Tem que buscar uma chave carácter. Coloque assim:

Código: Selecionar todos

If id->( ! DbSeek ( matriz_id[A,1] ) )
   id->( DbAppend ())
   ...
Endif
Este OrdSetFocus() deve executar apenas uma vez. Tire de onde está e coloque entre as linhas 34 e 35 do código mostrado.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

DbSeek eventualmente não funciona?? Será??

Mensagem por deividdjs »

alxsts escreveu:Ola!

O problema está na expressão de busca... está buscando um valor lógico em um índice carácter.
deividdjs escreveu:DBSEEK(c_cod==matriz_id[A,1])
Isto vai resultar .T. ou .F., que nunca vai existir no índice.

Tem que buscar uma chave carácter. Coloque assim:

Código: Selecionar todos

If id->( ! DbSeek ( matriz_id[A,1] ) )
   id->( DbAppend ())
   ...
Endif
Este OrdSetFocus() deve executar apenas uma vez. Tire de onde está e coloque entre as linhas 34 e 35 do código mostrado.
funcionou !! e o pior q eu tinha feito desta maneira tbm .. porem não com o Dbappend() ... o e ordsetfocus tinha posto na abertura do arquivo da forma q sempre fiz .. porem nada funcionava!!! vai entender!!

é brincadeira kkkk

Obrigado amigo ... showw
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

DbSeek eventualmente não funciona?? Será??

Mensagem por deividdjs »

Estou mundando umas rotinas de seek do meu sistema .. como eu faço pra fazer uma busca de duas chaves com o dbseek()

no caso seria pedido + codigo do produto

Código: Selecionar todos


   // neste caso estou dentro de um arquivo temporario buscando no arquivo PDP.DBF

   index on (cc_codped + cc_codprod)              tag pdpcx_16 

   IF Opcao := MsgBox2("Eliminar este item?",,13,,,2) == 1

		PDP->(DBGOTOP()) 
  		IF PDP->(ordsetfocus("PDPCX_16"),DBSEEK(c_codped) .and. DBSEEK(c_codprod))

                   select PDP 
                   Bloq_reg()
                       delete
                    unlock

                 select TMP
                 Bloq_reg()
                    delete;DBSKIP(1)
                 unlock                
              
 		   
endif

existe a necessidade do PDP->(DBGOTOP()) antes de buscar ??

Neste caso acima .. se eu encontrar no PDP.DBF quero apagar nas duas bases ... no PDP e no TMP

qual seria a solucion mais simplificada .. ??

o exemplo acima ele não retorna a pesquisa de modo satisfatório .. rsrs

Abraço!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

DbSeek eventualmente não funciona?? Será??

Mensagem por JoséQuintas »

Se campos numéricos:

Código: Selecionar todos

Index on Str( pedido, 10 ) + Str( produto, 10 ) TO indice
...
Seek Str( nPedido, 10 ) + Str( nProduto, 10 )
Se campos string

Código: Selecionar todos

index on pedido + produto to indice

seek cpedido + cProduto // mesmo tamanho do index
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

DbSeek eventualmente não funciona?? Será??

Mensagem por alxsts »

Olá!

Não precisa fazer DbGoTop().

A busca tem que estar de acordo com a chave de indexação:

Código: Selecionar todos

If PDP->( DbSeek( cc_codped + cc_codprod ) )
   PDP->( Bloq_reg(), DbDelete(), DbUnlock()  )
   TMP->( Bloq_reg(), DbDelete(), DbUnlock()  )
Endif
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

DbSeek eventualmente não funciona?? Será??

Mensagem por deividdjs »

TOP!! economizei umas 10 linhas de codigos .. heheh

tô enxugando o sistema ...

valeu amigos!! show!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Responder