Página 1 de 1
função que ajude na busca de nome de cliente
Enviado: 10 Out 2013 16:33
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?
função que ajude na busca de nome de cliente
Enviado: 10 Out 2013 16:51
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
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
função que ajude na busca de nome de cliente
Enviado: 10 Out 2013 18:20
por Piqueno
:{ Obrigado..
função que ajude na busca de nome de cliente
Enviado: 11 Out 2013 01:47
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
função que ajude na busca de nome de cliente
Enviado: 23 Out 2013 14:18
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.)
função que ajude na busca de nome de cliente
Enviado: 23 Out 2013 15:29
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.