Buscar palavras diferentes no mesmo campo e na mesma busca?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Buscar palavras diferentes no mesmo campo e na mesma busca?

Mensagem 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
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder