Novo campo - Filtro

(waae) #1

Olá.
Em uma consulta, tive que criar 3 novos campos que recebem os valores de outra tabela (os dados são carregados no OnRecord). Até ai tudo bem.

Só que eu preciso ter esses 3 campos como opção no filtro.
Coloquei-os no filtro… configurei tudo certinho… Mas ele não ‘aceita’ as condições quando tento filtrar por um desses ‘novos campos’.
Alguém já fez algo parecido? Deu certo?

(Cleyton Euler) #2

Jaqueline, não tem como você ligar estas tabela na SQL da consulta?

(waae) #3

como assim?
A estrutura é a seguinte:
já tenho uma tabela de promoções onde tenho:
Codigo
Cadastro (código da pessoa - vem de outra tabela)
Data de adesão
Hora da adesão

Só que nessa consulta preciso permitir que o usuário consiga filtrar determinadas pessoas por idade, cidade e sexo.
Por isso criei esses 3 campos: para que ao carregar a consulta dessa tabela, ele traga do cadastro essas informações da pessoa (idade, cidade e sexo).
Ele permite que eu coloque os campos como opções… Mas o filtro não se aplica!!!

(Cleyton Euler) #4

Acho que vc está fazendo um lookup no evento onRecord da sua consulta, é isso?

Vc pode fazer sua query usando Join para ligar as duas tabelas. Assim vc traz os campos que precisa das duas tabelas já na query da consulta.

(waae) #5

isso… estou colocando um lookup no evento onrecord.
Está puxando os dados corretamente pros campos que criei na consulta.

Onde entraria essa query usando Join? Não daria na mesma?

(Cleyton Euler) #6

Use o SQL Builder para montar sua query. Usando o Join seria como se você tivesse uma tabela só com campos de várias tabelas.

Neste link tem uma explicação: http://bokerao.wordpress.com/2008/08/07/clausula-join-innerleftright/

(waae) #7

Cleyton, usando o Join deu certo.
Carregou os dados e o filtro funciona.
Obrigada!

Mas agora outro problema:
Na tabela de cadastro, a data de nascimento está ‘quebrada’:
Tem um campo para o DIA, outro para o MÊS e outro para o ANO (precisei fazer assim!).
Só que no filtro eu precisaria colocar uma opçao para filtrar por IDADE.

Antes eu tinha criado o campo idade que no lookup ele calculava. Mas o que será que eu posso fazer agora? Afinal… esses novos ‘campos’ mesmo o scriptcase permitindo colocar como opção de Filtro… não funciona!! (BUG?)

(Cleyton Euler) #8

Você faz esse cálculo pelo ano?

(waae) #9

usava o “sc_dif_date_2”… dai jogava no campo a idade da pessoa.
Mas colocando o novo campo como opção no filtro… não filtra!

(Cleyton Euler) #10

Jaqueline,

Isso dá para resolver no banco de dados também. Supondo que a tabela chama-se tab_ano e o campo que você guarda o ano chama-se Ano:

No filtro, no campo de ano faça uma select com a query:

SELECT DISTINCT Ano, YEAR(NOW()) - Ano As Idade FROM tab_ano

Nesta query eu pego ano da data atual fazendo a subtração do ano no campo fazendo um novo campo chamado Idade. Considerando que o lookup no SC usa sempre o primeiro campo da select, o filtro vai ser feito pelo ano de nascimento, mas vai mostra a Idade para escolher.

Tem uma dica sobre isso http://www.scriptcasebrasil.com.br/forum/showthread.php?tid=41

(waae) #11

Adorei a solução!
Mas sinceramente nunca tive a necessidade de criar consultas mais ‘complexas’. Sempre fiz consultas básicas.

Só que nessa solução que você me deu, tem dois problemas:

  • Como ele considera apenas o ano, caso a pessoa não tenha feito aniversário ainda nesse ano atual, a idade dela vai estar ‘errada’!
  • Caso eu queira (como eu preciso) colocar no filtro as opções de “Menor que” e “Maior que”, ele vai filtrar “ao contrário” né?
    Ex:
    Se eu coloco “Maior que” 25 anos
    Na verdade ele vai filtrar ANO MAIORES que 1986, ou seja… vai acabar filtrando quem tem MENOS que 25.

entendeu? Vou dar uma analisada melhor aqui.

O que eu não entendo meeeeesmo é porque o SC permite colocar o “novo campo” no filtro e ele não funciona!

(Cleyton Euler) #12

Acho que ai a culpa não é do SC. Vc cria um campo que não existe na tabela. Como o SC vai fazer o filtro, já que consultas são feitas diretamente em tabelas?

Acho que o seu caso vai ser resolvido criando uma consulta no banco de dados e no SC fazer uma consulta baseado nesta consulta. Ai vc ja vai ter o campo idade na query.

Pois, mesmo que vc tivesse um campo tipo data para a data de nascimento, no filtro, usando maior que ou menor que, causaria o efeito inverso que vc citou.