Página 1 de 2
busca por palavra
Enviado: 31 Out 2007 17:10
por evaldo
Ola pessoal, estou precisando de um busca por palavra ex.: qdo digitar joao aparecer todos joao.
antonio joao
joao carlos
obrigado
Enviado: 31 Out 2007 17:13
por Maligno
Se você utiliza a biblioteca SIX, tem a sua disposição a função sx_WildSeek(), que serve pra isso mesmo. Se não utiliza a SIX e quiser testar, pegue no meu site. Link:
http://pub.buzinello.com/index.php?d=./ ... pper/libs/
Claro que, alternativamente, num DBF pequeno, você também poderia utilizar SET FILTER. Mas se o volume de dados a pesquisar for muito grande, é melhor esquecer; o desempenho cai drasticamente.
Enviado: 31 Out 2007 19:22
por Luciano Bonfim
você pode utilizar o velho e bom LOCATE....
Enviado: 31 Out 2007 19:23
por Luciano Bonfim
Eu particularmente quando tenho que fazer isso varro todo o arquivo e testo se o campo possui a palavra... ai vou jogando para um vetor e depois dou um tbrowse nesse vetor.... funciona que é uma beleza...
Enviado: 31 Out 2007 19:39
por Maligno
LOCATE e SET FILTER tem o mesmo problema: se o volume de dados for grande, é melhor fazer a busca na hora do almoço. Quando voltar, talvez ele tenha terminado.
Enviado: 31 Out 2007 23:42
por Luciano Bonfim
é claro.. isso é clássico!!!! rsrsrsrsrs
Enviado: 01 Nov 2007 08:36
por Pablo César
Eu também desaconselho o uso do LOCATE quando tem em vista que o arquivo pode ser grande de tamanho. Utilizando a indexação é o mais indicado, porém quando se trata de procurar o "joao" no meio do nome ou final, realmente a saída é usar o LOCATE. Não sei se o uso da biblioteca SIX tem algum opção de procura semelhante ao LOCATE. Mas acredito que a solução mais habitual é a indexação do campo que você procura. Aqui no fórum tem um exemplo desse tipo de busca (e em TBROWSE), dê uma olhada na seção
Download - Funções com Fontes em:
https://pctoledo.org/download/cop ... t&deonde=2
ou
https://pctoledo.org/download/cop ... t&deonde=2
Eu acho que se tem essa necessidade do usuário ter que pesquisar dessa forma, com certeza eu faria uma indexação do campo NOME.
Enviado: 01 Nov 2007 08:45
por Maligno
porém quando se trata de procurar o "joao" no meio do nome ou final, realmente a saída é usar o LOCATE. Não sei se o uso da biblioteca SIX tem algum opção de procura semelhante ao LOCATE.
Tem. É a função sx_WildSeek() que comentei na minha primeira mensagem. Mas não é semelhante à LOCATE ou SET FILTER quanto à forma de trabalho. Você só precisa que o campo a pesquisar tenha uma chave de índice. Aliás, eu havia me esquecido de comentar isso. Se bem que é fácil deduzir.

Enviado: 01 Nov 2007 09:19
por Pablo César
Sim é fácil de deduzir, mas o que eu queria saber se existe alguma função so SIX ou até mesmo de outro RDD que possa fazer a procura por SUBSTRING, assim como o faz o LOCATE. será que tem ?
Enviado: 01 Nov 2007 09:24
por Maligno
Essa função sx_WildSeek() faz exatamente isso, utilizando o índice.
Enviado: 01 Nov 2007 09:35
por Pablo César
Ahh é ? Isso que queria saber. Só para confirmar mais uma vez Maligno:
Se eu tiver um caso em que o nome do cliente é:
"JOAO PAULO DA SILVA"
E preciso pesquisar esse campo, com sx_WildSeek() ela vai encontrar a string JOAO que procuro ?
Sei que talvez não seja o caso do colega Evaldo, mas gostaria de saber se funciona mesmo ao igual que o LOCATE mesmo e não tão somente se começar com a string JOAO.
Enviado: 01 Nov 2007 09:38
por Maligno
Se, por exemplo, você procurar por "PAULO" a função encontrará a primeira ocorrência. Não importa onde esteja a sub-string. E com um argumento especial, ela continuará a busca até encontrar outra ocorrência. Mesmo que o volume de dados seja gigantesco, a pesquisa é instantânea.
Enviado: 01 Nov 2007 09:41
por Luciano Bonfim
interessante essa funçäo, eu näo a conhecia.... funciona no xharbour?
Enviado: 01 Nov 2007 09:43
por Pablo César
Beleza ! Quê bom que é essa sx_WildSeek() então. Não sabia disso e que não compremetia a rapidez de execução por conta do tamanho. Obrigado pelo esclarecimento, Maligno.
Enviado: 01 Nov 2007 09:45
por Maligno
O Xharbour, ao que me parece, tem uma biblioteca compatível com a SIX. Salvo engano, não está completa e talvez não tenha uma função equivalente a essa. Mas lance a dúvida na seção de XHarbour. Certamente alguém responderá.