Fórum Filtro com mais de um campo... #220878

17/03/2004

0

Olá...
estou com um probleminha, tenho uma tabela de cadastro de membros, e os campos cargo, cargo2, cargo3, cargo4, cargo5, cargo6, preciso que ao selecionar a descricao do cargo em um dblookupcombobox(ligado a tabela cargos), ele filtre a tabela membros, retornando todos os registros que possuem a descricao de cargo(o texto do dblookupcombobox), nos 6 campos de cargo(filtrando os 6 campos ao mesmo tempo, através do texto do dblookupcombobox), mas a pesquisa tem q ser exata.
por exemplo:consegui usar;

if  (pos (uppercase (dblookupcombobox1.text), uppercase(tabmembroscargo.value) + uppercase (tabmembroscargo2.value) + uppercase(tabmembroscargo3.value) + uppercase(tabmembroscargo4.value) + uppercase(tabmembroscargo5.value) + uppercase(tabmembroscargo6.value))) <> 0
then
  accept:=true
else
  accept:=false;
end;


Mas se nos campos de cargo tem alguma descricao, por ex.
´Pastor´ e ´Pastor auxiliar´, e no dblookupcombobox eu seleciono ´Pastor´, ele me mostra ´pastor´ e também ´pastor auxiliar´, eu preciso q ele me mostre só ´pastor´ ou ´pastor auxiliar´, enfim q a pesquisa seja exata.

desde já agradeço a atençao dos colegas

um forte abraço.

cleverson l. rutes


Cleverson_rutes

Cleverson_rutes

Responder

Posts

18/03/2004

Allen74

Cleverson,

Eu acho que uma QUERY seria a forma mais adequada de fazer este tipo de pesquisa. Um modelo seria:
  Query1.SQL.Clear;
  Query1.SQL.Add (´SELECT campo1,campo2,campon FROM membros WHERE cargo=:P1 AND cargo2=:p1 AND cargo3=:P1 AND cargo4=:p1 AND cargo5=:p1 AND cargo6=:p1´);
  Query1.ParamByName(´p1´).AsString = DbLookupCombobox1.Text;
  Query1.Open;


Se você realmente precisa utilizar filtros, o correto seria:
  ...
  acept := (AnsiUpperCase(DbLookupComboBox1.Text) = AnsiUpperCase(TabMembrosCargo.Value)) AND
    (AnsiUpperCase(DbLookupComboBox1.Text) = AnsiUpperCase(TabMembrosCargo2.Value)) AND
    (AnsiUpperCase(DbLookupComboBox1.Text) = AnsiUpperCase(TabMembrosCargo3.Value)) AND
    (AnsiUpperCase(DbLookupComboBox1.Text) = AnsiUpperCase(TabMembrosCargo4.Value)) AND
    (AnsiUpperCase(DbLookupComboBox1.Text) = AnsiUpperCase(TabMembrosCargo5.Value)) AND
    (AnsiUpperCase(DbLookupComboBox1.Text) = AnsiUpperCase(TabMembrosCargo6.Value));

Para que a consulta seja exata você não poderia utilizar Pos() e tampouco concatenar os valores dos campos como fez.

Agora, se você não se importar, apenas um questionamento sobre seu projeto: Porquê seis campos para receber o nome do cargo? Me parece que seu banco de dados não está propriamente normalizado.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar