SET FILTER, filtar de acordo com as informações lidas

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

smith
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 07 Abr 2006 13:02

SET FILTER, filtar de acordo com as informações lidas

Mensagem por smith »

Gostaria de filtar o arquivo de acordo com as informações lidas:

estou tentando algo deste tipo mas não funciona !

IF .NOT. EMPTY(VAR1)
PESQUISA= ALLTRIM(VAR1) + " $ CAMPO1 .AND."
ENDIF

IF .NOT. EMPTY(VAR2)
PESQUISA= PESQUISA + ALLTRIM(VAR2) + " $ CAMPO2 .AND."
ENDIF

no final eu retiro os últimos 5 caracteres (.AND.) e faço:
SET FILTER TO PESQUISA

mas não retorna nada !
Alguém pode me ajudar ???
Desde já muito obrigado.
Rsteimetz[Maj]
www.q2a.hajas.org
Jarbas
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 08 Dez 2005 17:48
Localização: Sao Paulo

Mensagem por Jarbas »

Smith, acho q o seu problema está no .AND. Pq qdo vc diz :

Set filter 'jarbas' $ campo1 .and. 'smith' $ camp2 , isto só vai dar certo se for satisfeito as duas condicoes , isto é obrigatoriamente 'jarbas' terá q estar contido no campo1 e 'smith' no campo2, tente usar o .OR.

Outra dica, pra vc nao precisar tirar o .and. ou .or. do final use assim :

IF .NOT. EMPTY(VAR1)
PESQUISA= ALLTRIM(VAR1) + " $ CAMPO1 "
ENDIF

IF .NOT. EMPTY(VAR2)
PESQUISA= PESQUISA + " .AND." + ALLTRIM(VAR2) + " $ CAMPO2 "
ENDIF

Até mais
smith
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 07 Abr 2006 13:02

Mensagem por smith »

vamos por parte !

assim funciona:
SET FILTER TO alltrim(PESQNOME) $ CLIENTE

assim não:
IF .NOT. EMPTY(PESQNOME)
PESQUISA=ALLTRIM(PESQNOME) + " $ CLIENTE"
ENDIF
SET FILTER TO PESQUISA

alguém sabe porque ???
Rsteimetz[Maj]
www.q2a.hajas.org
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá,

Veja a diferença na sintaxe entre as duas linhas:

SET FILTER TO alltrim(PESQNOME) $ CLIENTE

PESQUISA=ALLTRIM(PESQNOME) + " $ CLIENTE"

O operador $ seria algo como "contém em".

No primeiro caso vc verifica se o conteudo de PESQNOME está CONTIDO em CLIENTE.

Na segunda sentença você cria uma string, se por exemplo seu PESQNOME é "JOÃO", vc estará filtrando seu banco por nomes que sejam iguais a "JOÃO $ CLIENTE" e dificilmente você irá encontrar alguém com tal nome.

Ok...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
digitom
Usuário Nível 2
Usuário Nível 2
Mensagens: 93
Registrado em: 06 Abr 2006 13:52
Localização: Anápolis-Go
Contato:

Mensagem por digitom »

Acho que se você usar um macro talvez funcione


IF .NOT. EMPTY(VAR1)
PESQUISA := ALLTRIM(VAR1) + " $ CAMPO1 "
ENDIF

IF .NOT. EMPTY(VAR2)
PESQUISA= PESQUISA + " .AND." + ALLTRIM(VAR2) + " $ CAMPO2 "
ENDIF

SET FILTER TO &PESQUISA
Fui :)
smith
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 07 Abr 2006 13:02

Mensagem por smith »

Obrigado a todos pela ajuda !
Baseado nas informações de vc's eu resolvi ( aparentemente ) esta etapa.
Obrigado mesmo !
Até.
Rsteimetz[Maj]
www.q2a.hajas.org
Responder