Página 1 de 1

Buscar palavras diferentes no mesmo campo e na mesma busca?

Enviado: 15 Set 2007 09:17
por ANDRIL
Ola Pessoal.

Fiz uma busca no forum mais n encontrei nada relacionado a essa duvida.

Var="CAPOEIRA; KARATE"

Suponha que o usuario esteja procurando por 2 palavras cidadas acima no banco de dados que contem o campo LUTAS.

No primeiro registro do dbf tenho as seguintes informacoes:
No campo LUTAS contem "BOXE, JUDO, KARATE"

No segundo registro do dbf tenho as seguintes informacoes:
No campo LUTAS contem "CAPOEIRA, LUTA LIVRE"

No terceiro registro do dbf tenho as seguintes informacoes:
No campo LUTAS contem "KARATE"

Eu pego a VAR e extraio as palavras delimitadas por [;] exemplo CAPOEIRA

SET FILTER TO "CAPOEIRA"$LUTAS

-me mostram todos que contem "CAPOEIRA"

E
Como faco para que no mesmo FILTER procure pelos registros que contenham as duas palavras (POREM ELAS PODEM ESTAR EM ORDENS DIFERENTES DENTRO DO CAMPO "LUTAS") SEM usar a clausala .OR.

SET FILTER TO "CAPOEIRA"$LUTAS.or."KARATE"$LUTAS


Fora esta forma existe outra, pois tenho um filtro grande que esta dando problema no tamanho da linha ( limite de 255 caracteres ) entao se tiver como exugar a linha de comando acho q ira resolver.


Nao sei se fui claro mais acho que vcs entenderao.


Abracos

Enviado: 15 Set 2007 10:51
por Maligno
Como faco para que no mesmo FILTER procure pelos registros que contenham as duas palavras (POREM ELAS PODEM ESTAR EM ORDENS DIFERENTES DENTRO DO CAMPO "LUTAS") SEM usar a clausala .OR.
Não é possível sem incluir uma nova condição ligando-a pelo operador lógico OR.

Uma alternativa é você classificar cada luta com um número, desde que não sejam muitas. Ao invés de lutas, vou usar letras (preguiça minha) como exemplo:

Campo CODIGO:
A = 1
B = 2
C = 4
D = 8

Se você indexar por esse código vai até poder dispensar o SET FILTER, que normalmente é lento. Assim, se quiser encontrar todos os registros que contenham as letras B e D, em qualquer ordem, basta somar seus códigos: 10. SEEK CODIGO=10 retornará a primeira ocorrência. Coloque isso numa malha e o serviço está feito.