função que ajude na busca de nome de cliente

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Piqueno
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Out 2013 18:07
Localização: Monte Carmelo-MG

função que ajude na busca de nome de cliente

Mensagem por Piqueno »

Boa tarde,Preciso de uma função que me retorne o nome de um cliente. digitado em um campo de busca.
Estou usando assim:

Código: Selecionar todos

.
.
 db_contato()	    
		 dbselectarea("contatos")
		 set index to ind_Cnom
..
..
@ 6,10 say "Nome.....:" get cNom picture "@!" valid !empty(cNom)
		 @ 18,10 say "Digite o nome ou Tecle ESC para sair!"
..
..

go top
set softseek on
seek cNom	
* desta forma acima busca o nome, porem não me retorna como queria, gostaria que quando eu digitasse no campo de busca ele me traga o nome correto e que eu possa editar seus dados. se existir dois ou mais contatos com mesmo nome seja mostrado. no dbedit() consigo fazer e como fazer?
Editado pela última vez por Toledo em 10 Out 2013 19:16, em um total de 1 vez.
Razão: O presente tópico foi movido da seção Ferramentas de Apoio, uma vez que seu conteúdo não tem relação com os objetivos daquela seção.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

função que ajude na busca de nome de cliente

Mensagem por rochinha »

Amiguinho,

Em rela;'ao ao seu c[odigo, n'ao sei se exemplo ou trecho real deve-se estar atento a algumas coisas.

Código: Selecionar todos

db_contato()	
dbselectarea("contatos")
set index to ind_Cnom
A indexacao levara em conta todo o tamanho do campo e seu conteudo, portanto para a pesquisa n'ao falhar ou chegar proximo faca assim

Código: Selecionar todos

go top
set softseek on
seek alltrim(varCnom)
NUNCA edite ou trabalhe com os campos de forma direta. Voce pode travar o acesso ao registro do DBF. Use variaveis.

A partir dai carregue o conteudo dos campos em variaveis, edite normalmente e salve

Código: Selecionar todos

lEditaRegistro = .t.
varRecno = recno()
varCnom = contatos->cnom
varfone = contatos->fone
...
@ 6,10 say "Nome.....:" get varCnom picture "@!" valid !empty(cNom)
@ 8,10 say "Fone......:" get varFone picture "@!"
read
...
if lastkey() <> 27
   * Se ultima tecla n'ao foi ESC continua
   dbselectarea("contatos")
   if lEditaRegistro
      go varRecno
      * pula para o registro
   else
      append blank
      * Se nao estou editando e sim incluindo cria novo registro
      contatos->cnom = varCnom
      contatos->fone = varfone
   endif
endif   
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Piqueno
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Out 2013 18:07
Localização: Monte Carmelo-MG

função que ajude na busca de nome de cliente

Mensagem por Piqueno »

:{ Obrigado..
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

função que ajude na busca de nome de cliente

Mensagem por rochinha »

Amiguinho,

Corrigindo:

Código: Selecionar todos

lEditaRegistro = .t.
varRecno = recno()
varCnom = contatos->cnom
varfone = contatos->fone
...
@ 6,10 say "Nome.....:" get varCnom picture "@!" valid !empty(cNom)
@ 8,10 say "Fone......:" get varFone picture "@!"
read
...
if lastkey() <> 27
   * Se ultima tecla n'ao foi ESC continua
   dbselectarea("contatos")
   if lEditaRegistro
         go varRecno
         * pula para o registro
   else
         append blank
   endif
   * Se nao estou editando e sim incluindo cria novo registro
   contatos->cnom = varCnom
   contatos->fone = varfone
endif
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
ribass@osite.com.br
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 23 Out 2013 13:50
Localização: Guarulhos-SP

função que ajude na busca de nome de cliente

Mensagem por ribass@osite.com.br »

Código: Selecionar todos

*****************************************************************************
Static Function Busca_Cli(w_Cli)
*****************************************************************************
IF EMPTY(w_Cli)
   RETURN(.F.)
ENDIF
Men([Aguarde, Procurando ...],-1)
Select CadCli
Set Order to 2 &&->Indice Nome
LOCATE FOR ALLTRIM(w_Cli)$raza_CLIE
IF !FOUND()
  TONE(1400,1); Men([Nome Não Localizado !],2)
  w_Cli:=SPACE(45)
  RETURN(.F.)
ENDIF
w_SAIR:=.F.
DO WHILE .T.
  wCODI_CLIE:=IIF(FOUND(),CODI_CLIE,SPACE(5))
  wRAZA_CLIE:=IIF(FOUND(),RAZA_CLIE,SPACE(45))
  wTIPO_CLIE:=IIF(FOUND(),TIPO_CLIE,SPACE(1))
  wENDE_CLIE:=IIF(FOUND(),ENDE_CLIE,SPACE(40))
  wBAIR_CLIE:=IIF(FOUND(),BAIR_CLIE,SPACE(20))
  wMUNI_CLIE:=IIF(FOUND(),MUNI_CLIE,SPACE(15))
  wCEP_CLIE :=IIF(FOUND(),CEP_CLIE ,SPACE(8))
  wUF_CLIE  :=IIF(FOUND(),UF_CLIE  ,SPACE(2))
  wCGC_CLIE :=IIF(FOUND(),CGC_CLIE ,SPACE(14))
  wINSC_CLIE:=IIF(FOUND(),INSC_CLIE,SPACE(16))
  wFANTASIA :=IIF(FOUND(),FANTASIA,SPACE(20))
  SETCOLOR(cor[11]); @ 06,28 SAY IIF(EOF(),[         ],IIF(wTIPO_CLIE=[J],[JUR¡DICA ],[F¡SICA   ]))
  SETCOLOR(cor[14])
  @ 06,13 SAY wCODI_CLIE PICT [@R 9.9999]
  @ 06,26 SAY wTIPO_CLIE PICT [!]
  @ 07,13 SAY wRAZA_CLIE PICT [@!]
  @ 07,59 SAY wFANTASIA  PICT [@!]
  @ 08,13 SAY wENDE_CLIE PICT [@!]
  @ 08,62 SAY wBAIR_CLIE PICT [@!S16]
  @ 09,13 SAY wMUNI_CLIE PICT [@!S18]
  @ 09,37 SAY wCEP_CLIE  PICT [@R 99999-999]
  @ 09,55 SAY wUF_CLIE   PICT [@!]
  @ 10,13 SAY wCGC_CLIE  PICT w_CGC
  @ 10,56 SAY wINSC_CLIE PICT [@!]
  IF w_SAIR
    EXIT
  ENDIF
  IF FOUND()
    SETCOLOR([R*/BG])
    @ 07,12+AT(ALLTRIM(w_VARIAVEL),raza_CLIE) SAY ALLTRIM(w_VARIAVEL) PICT [@!]
    SETCOLOR(cor[14])
    IF !Conf([CONTINUA PESQUISA ?])
      w_SAIR:=.T.
      GO BOTT; SKIP
      LOOP
    ENDIF
    Men([Aguarde, Procurando ...],-1)
    CONT
  ELSE
    TONE(1400,1); Men([Final do Arquivo !],2)
    w_SAIR:=.T.
  ENDIF
ENDDO
SETCOLOR(cor[1])
RETURN(.F.)
Editado pela última vez por Toledo em 23 Out 2013 20:11, 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
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

função que ajude na busca de nome de cliente

Mensagem por Eolo »

Código: Selecionar todos

Select CadCli
Set Order to 2 &&->Indice Nome
LOCATE FOR ALLTRIM(w_Cli)$raza_CLIE
...
CONT
Ribas,
1. O LOCATE não respeita índices abertos em conjunto com o DBF. Ele procura sequencialmente, a partir do recno()=1, registro por registro (na ordem física dos registros), até que a condição seja encontrada. O CONT[inue] continua a busca a partir de onde parou. Então, pode deletar essa linha "Set Order to", não está sendo usada.

2. Por isso, o LOCATE é um processo MUITO lento. Se o DBF tem 1 milhão de registros e o que vc procura está entre os 10 últimos, o LOCATE vai checar 999.990 registros antes de achar alguma coisa...

Tem que partir pra outra solução. Dá uma pesquisada no Forum, esse assunto já foi amplamente comentado.
Responder