Página 2 de 2

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

Enviado: 12 Mar 2017 21:17
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

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

Enviado: 13 Mar 2017 16:35
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.

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

Enviado: 12 Dez 2023 13:35
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!

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

Enviado: 12 Dez 2023 15:24
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.

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

Enviado: 12 Dez 2023 15:57
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

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

Enviado: 14 Mar 2024 16:35
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!

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

Enviado: 14 Mar 2024 17:15
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

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

Enviado: 14 Mar 2024 17:16
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

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

Enviado: 15 Mar 2024 07:41
por deividdjs
TOP!! economizei umas 10 linhas de codigos .. heheh

tô enxugando o sistema ...

valeu amigos!! show!