Pesquisa Com SEEK

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Rosangelo
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 02 Dez 2009 18:29
Localização: Parana

Pesquisa Com SEEK

Mensagem por Rosangelo »

Preciso de ajuda, não estou conseguindo fazer uma pesquisa com tres dados ao mesmo tempo
exemplo, tenho um programa que precisa pesquisar, Matricula do fornecedor, NF e a SF, se a pesquisa for encontrada
traz os dados para tela, caso não tenha encontrado nota no banco mensagem na detal NF nao encontrada
exemplo

Código: Selecionar todos

MATRICU	= 0
NF     	= 0
SERNF	=0
@ 06,05 SAY "FORNECEDOR.:"    	  GET MATRICU	 PICTURE "9999999" 
@ 06,31 SAY "NUMERO NF.:"     	  GET NF         PICTURE "999999"
@ 06,55 SAY "SERIE.:" 	      	  GET SERNF      PICTURE "99"
READ

SELECT ENTEST1
SEEK (MATRICU,NF,SERNF )
  IF FOUND()
    @ 09,18 SAY DATANF 
    @ 09,46 SAY DATAENT  
    @ 13,05 SAY CODIGO
    @ 13,25 SAY UNIDADES
    @ 13,45 SAY VALORUNI
    @ 17,57 SAY VALTOTAL
    @ 18,11 SAY OBSERV
    ELSE 
     ALERT ("NOTA FISCAL NAO ENCOTRADA")
   LOOP
 ENDIF
Editado pela última vez por Toledo em 04 Jun 2010 19:21, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Vander
Usuário Nível 3
Usuário Nível 3
Mensagens: 214
Registrado em: 23 Jul 2004 01:43
Localização: João Monlevade - MG

Re: Pesquisa Com SEEK

Mensagem por Vander »

Olá Rosangelo;

Como você esta criando os indices ?

Vander
HbMake v1.17
xHarbour build 0.99.70 Intl. (SimpLex)
Borland C++ 5.5.1
fivewin 6.12 (FREE)
Workshop 4.5
MEdit
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Pesquisa Com SEEK

Mensagem por alaminojunior »

Rosangelo escreveu:SEEK (MATRICU,NF,SERNF )
IF FOUND()
Pois é !

1º passo é indexar usando os três campos em questão:

Código: Selecionar todos

index on matricu+nf+sernf to arquivo

Assumindo que os três campos são de tipos iguais.

Daí sim, emitir o Seek, que aliás pode ser usado a maneira funcional que já devolve o resultado:

Código: Selecionar todos

if !dbseek(matricu+nf+sernf)
   alert("não achei")
...
...
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Pesquisa Com SEEK

Mensagem por alxsts »

Olá Rosangelo, seja bem-vindo ao Fórum!
alaminojunior escreveu:index on matricu+nf+sernf to arquivo
Analisando o código postado, percebe-se, pelas Pictures dos Gets, que os 3 campos são numéricos. Assim, se os campos do DBF também forem numéricos, o índice deve ser:

Código: Selecionar todos

index on Str( matricu, 7 ) + Str( nf, 6 ) + Str( sernf, 2 ) to arquivo
Após a criação deste índice, será possível faser o SEEK ou DbSeek() mostrado pelo Alamino, fazendo-se as conversões:

Código: Selecionar todos

If ! DbSeek( Str( matricu, 7 ) + Str( nf, 6 ) + Str( sernf, 2 )
   alert("não achei")
Endif
Achei estranho o campo serie da NF ser numérico. Geralmente é alfanumérico. Ex: "U ", "B1 ", etc...
[]´s
Alexandre Santos (AlxSts)
Rosangelo
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 02 Dez 2009 18:29
Localização: Parana

Pesquisa Com SEEK

Mensagem por Rosangelo »

ok muito obrigado
entedi, fiz desta maneira "index on matricu+nf+sernf to arquivo" e deu certo, porque os tres campos são numericos certo,
e quando o um campo é Character dai como faço, pois normalmente o campo da serie da NF é 1S, F,G,1E??????????
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Pesquisa Com SEEK

Mensagem por Maligno »

fiz desta maneira "index on matricu+nf+sernf to arquivo" e deu certo, porque os tres campos são numericos
Se os campos são numéricos e você fez desse jeito, com toda certeza está errado. Os números se somam e deixam de representar as informações.

Aliás, NF, série e matrícula são dados que deveriam ser sempre char. Qualquer dado que não necessite de cálculo (incluindo números de ID em seqüência) sempre deveria ser char. Isso facilita muito em várias situações. Inclusive na composição de chaves de índice. Se esses dados fossem char aí sim, sua chave estaria certa.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Rosangelo
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 02 Dez 2009 18:29
Localização: Parana

Pesquisa Com SEEK

Mensagem por Rosangelo »

:)) Então fiz da maneira que sugeriu, matricula, nf e serie do tipo char,
Porem não me satisfaz, pois eu tenho um código que utilizando o dbbuttom gera um matricula automática, somando na ultima gravada no banco +1. Por isso minha matricula e do tipo numérico, e nf também pois posso precisar selecionar (tipo relatório) das NF de Uma numeração ate Outra etc, o único campo Char seria a serie, preciso de um índice que pesquise Matric, NF , do tipo numeric, e serie do tipo char, isso e possivel???? Preciso de um exemplo
:D
Ex:
Matric = 0
NF = 0
Serie = Space(2)

Seek Matric,NF,Serie
If found ()
? “mostra os dados na tela “
else
? “NF não encontrada”
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Pesquisa Com SEEK

Mensagem por Maligno »

Eu também às vezes preciso de um número em seqüência. Ainda assim, mantenho tudo char e faço a conversão/conta quando necessário. Exemplo:

NF := StrZero(Val(NF)+1,6)

Prefiro isso (faço só de vez em quando) do que fazer a conversão de tipos dentro da chave de índice, o que consome muito tempo de processamento. É a regra de ouro: "Dos males, o menor". :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Pesquisa Com SEEK

Mensagem por alaminojunior »

Veja o que lhe dá menos trabalho e dor de cabeça futura: converter os campos no dbf, ou então faça como sugeriu o Alex: converta na indexação e no seek.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Responder