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!