Página 1 de 1
Como pesquisar por uma palavra no campo
Enviado: 17 Jan 2011 13:39
por Paulao
Boa tarde meus amigos, necessito fazer uma pesquisa no cadastro de clientes por parte do nome do cliente, nao necessariamente pelo primeiro nome, exemplo : Paulo Cesar da Silva, gostaria que ele encontrasse o cliente se eu digitasse Cesar, existe algo que encontre o cliente desta forma?
Utilizo clipper 5.2e e blinker
Obrigado a todos.
Re: Como pesquisar por uma palavra no campo
Enviado: 17 Jan 2011 14:19
por Pablo César
Você deverá criar uma função e utilizar o comando LOCATE mas é muito lento, o processo. Também pode utilizar um RDD da SIX ou (possivel CDX) OU outro que aceite o sx_WildSeek que é bem pra isso que você está precisando. Procure aqui no forum, tem bastante sobre isso lá no fórum de BD.
Veja por exemplo este tópico:
https://pctoledo.org/forum/viewto ... 244#p18244
Re: Como pesquisar por uma palavra no campo
Enviado: 18 Jan 2011 11:19
por Paulao
Resolvi o problema de uma forma muito fácil usando o comado locate, mas como ele e lento continuei usando o seek, caso nao encontre pelo seek ai o locate entra em cena, e ficou como eu esperava, usando a rotina do locate dentro de um tbrowse com busca por qualquer coluna ele funcionou muito bem, segue abaixo a rotina que utilizei .
Código: Selecionar todos
@ 20,09 SAY "Procura: " color "n+/w"
@20,18 say spac(22)
nCursor := SETCURSOR(SC_NORMAL)
@ 20,09 SAY " Procura: " color "n/w"
@20,19 GET cSearch ;
PICTURE "@!S20" COLOR "W/r" //valid complser(cSearch)
READ
SETCURSOR(SC_NONE)
cSearch := TRIM(cSearch)
SeekIt( cSearch ,, b )
if (!found())
locate for cSearch$(&(indexkey()))
if(!eof())
b:refreshAll()
else
msg("Registro nÆo encontrado")
endi
endi
Como pesquisar por uma palavra no campo
Enviado: 31 Jul 2013 00:01
por Clash
Eu utilizo o CDX para os índices e crio arquivos temporários por terminal, assim:
Código: Selecionar todos
INDEX on NOME to &tLocal\IDCLISEP for alltrim(Right(cVar_Pro,33))$NOME
Como pesquisar por uma palavra no campo
Enviado: 08 Ago 2013 20:49
por sygecom
Paulo,
O Locate funciona bem, mas cuida que em tabelas com muitos registros isso pode ser um tiro no pé. As dica do Pablo são o melhor caminho, e se for NTX de uma procurada em umas dica do Rochinha sobre SUBNTX
Como pesquisar por uma palavra no campo
Enviado: 09 Ago 2013 18:33
por Jairo Maia
Olá Pessoal,
Apenas para registro:
O Locate como foi dito é uma excelente ferramenta para alguns casos, mas ela funcionará muito rápido se for usado em conjunto com o comando
Set Filter To <lExpressao>, deixando visiveis somente os registros que atendem as condições do Filtro.
Por exemplo:
Código: Selecionar todos
Set Filter To cNomeCli > "J"
Go Top
? cNomeCli // retorna o primeiro registro que inicai com a letra acima do J
Set Filter To // desfaz a condição
Como pesquisar por uma palavra no campo
Enviado: 10 Ago 2013 20:42
por Eolo
Jairo, eu tentei usar algumas vezes o SET FILTER e, em qualquer situação, sempre ficou tudo muito lento. Não sei explicar o por que, mas troquei o FILTER pela cláusula FOR do INDEX, resolveu em muito o meu problema de "performance". Algo do tipo INDEX ON NOME FOR "SILVA"$NOME, num exemplo bem simples. Funcionou legal, mas tem que criar índice temporário (pra entrar o "SILVA") e, numa tabela muito grande, pode ser um impecilho no run time.
No xHarbour tem a OrdWildSeek(), fantástico, dica do Leonardo: uma tabela gigante, vc manda procurar qq coisa e joga numa matriz, é instantâneo. No Clipper, acho que a SIX faz algo semelhante, mas nunca usei.
Enfim, o SET FILTER, pra mim, foi tiro no pé, como o Leonardo já mencionou antes.
Como pesquisar por uma palavra no campo
Enviado: 11 Ago 2013 06:44
por Jairo Maia
Olá Eolo,
Ter que usar o LOCATE realmente é sempre um tiro no pé. Por isso este recurso deve ser usado em casos esporádicos, enquanto casos frequntes devemos usar o SEEK.
Quanto a OrdWildSeek(), o Harbour também tem. Esta função permite a busca de uma cadeia de string, mas a área necessariamente precisa estar indexada com o campo desejado.
Penso que uma pesquisa usando o LOCATE é útil disponibilizar, apenas para atender uma situação atípica. Fora isso, não é conveniente mesmo. Concordo também.
Como pesquisar por uma palavra no campo
Enviado: 13 Ago 2013 11:34
por Eolo
Paulao, vou postar uma ideia simples, que pode ser um workaround fácil de implementar, sem muita complicação e sem usar o LOCATE ou o SET FILTER.
Mantenha o campo NOME, que vai continuar a ser usado como hoje. Crie mais “n” campos, NOME1, NOME2 etc., que vão conter pedaços do NOME:
NOME = JOSÉ SOUZA FERNANDES
NOME1 -> JOSÉ
NOME2 -> SOUZA
NOME3 -> FERNANDES
NOME4 -> (vazio)
NOME5 -> (vazio)
Agora é só criar os índices (pode ser até o NTX) pra cada um desses campos extras e usar o SEEK. Como o SEEK responde instantaneamente, a procura (mesmo multiplicada pelos 5 campos extras) não vai gastar muito tempo adicional...
No GET, vc só usa o campo NOME. Na hora de gravar, salva o nome completo em NOME e cada pedaço nos campos extras (considernado o "espaço" como separador. Isso vai ficar transparente para o usuário.
Código: Selecionar todos
* Um exemplo, só só pra mostrar o funcionamento do AT(). Não testei. Faça as correções e adaptações que achar necessárias.
vNOME:=NOME
For x=1 to 5
posicao= at(“ “,vNOME)
vPARTE:=substr(vNOME,1,posicao-1)
campo=”NOME”+str(x,1,0)
Repl (&campo) with vPARTE
vNOME:=substr(posição+1,len(vNOME))
next
Como pesquisar por uma palavra no campo
Enviado: 13 Ago 2013 12:02
por Eolo
Vi um treco parecido há muito tempo atrás, ainda no tempo do Clipper Summer: um colega fez um sistema para uma empresa de Marcas e Patentes, que tinha muita legislação cadastrada (quase tudo em campos MEMO!) e, como os DBFs eram grandes e a procura dentro dos MEMOs impraticável (o PC campeão daquela época era o 286...), ele criou alguns campos CARACTER onde o usuário cadastrava “palavras-chave” para cada registro.
Quando o usuário pesquisava uma palavra-chave, o programa fazia um SEEK nesses campos e a resposta era “imediata”. Era só usar os registros selecionados. Com o LOCATE, o cliente final perdia o prazo pra atualizar o registro da marca...

Como pesquisar por uma palavra no campo
Enviado: 13 Ago 2013 14:25
por Vander
Como pesquisar por uma palavra no campo
Enviado: 13 Ago 2013 14:40
por Eolo
Boa tarde meus amigos, necessito fazer uma pesquisa no cadastro de clientes por parte do nome do cliente, nao necessariamente pelo primeiro nome, exemplo : Paulo Cesar da Silva, gostaria que ele encontrasse o cliente se eu digitasse Cesar
Vander, o Paulao quer pesquisar uma palavra localizada em QUALQUER POSIÇÃO dentro do campo, não só no começo dele. O exemplo que vc postou faz a procura letra a letra, mas sempre no começo do campo...