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: 765
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: 8028
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 2 vezes
Curtiram: 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: 401
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr
Curtiram: 1 vez

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
Saludos,
Deivid José de Souza
Windows 11 + Harbour 3.4 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
hwgui 2.23 b8
alxsts
Colaborador
Colaborador
Mensagens: 3107
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: 401
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr
Curtiram: 1 vez

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
Saludos,
Deivid José de Souza
Windows 11 + Harbour 3.4 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
hwgui 2.23 b8
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 401
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr
Curtiram: 1 vez

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!
Saludos,
Deivid José de Souza
Windows 11 + Harbour 3.4 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
hwgui 2.23 b8
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 3107
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: 401
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr
Curtiram: 1 vez

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

Mensagem por deividdjs »

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

tô enxugando o sistema ...

valeu amigos!! show!
Saludos,
Deivid José de Souza
Windows 11 + Harbour 3.4 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
hwgui 2.23 b8
Responder