Filtro SQL com 3 condições (era: Logica..)
[color=red:5f0b7eb1f1]Título editado por Massuda
Por favor, procure usar um título descritivo.[/color:5f0b7eb1f1]
alguem pode me dar ideia de como fazer um filtro SQL utilizando 3 condiçoes:
1º se o checkbox1 esta marcado, entao pegar o valor do edit1
2º se o valor do combobox1 for diferente de ´[Select..]´
3ºse o valor do combobox2 for diferente de ´[Select..]´
gostaria de executar a seguinte query:
SELECT * FROM DATA Where Dia=´edit1.text´ and valor1=´combobox1.text´ and valor2=´combobox2.text´ ORDER BY DIA;
porem nao gostaria de usar varios ifs..
estava pensando em fazer uma funçao generica, na qual eu passaria as colunas do banco como um array e os valores da pesquisa como um array tmbm, depois ele agrupara td e me retornava uma string com o sql montado ja..
espero que alguem possa me ajudar a solucionar isto..
[]´ a todos q colaborarem..
Nightshade
Curtidas 0
Respostas
Denis
30/11/2006
Já pensou em usar uma Stored procedure ?
GOSTEI 0
Emerson Nascimento
30/11/2006
olha, creio que não tem como você fugir dos if´s...
mas a idéia da função é muito boa.
qry.close; qry.sql.text := ´SELECT * FROM DATA ´+ ´Where Dia like :Dia and valor1 like :valor1 and valor2 like :valor2 ORDER BY DIA´; if checkbox1.checked then qry.sql.parambyname(´dia´).asstring := edit1.text else qry.sql.parambyname(´dia´).asstring := ´¬´ if combobox1.text <> ´´ then qry.sql.parambyname(´valor1´).asstring := combobox1.text else qry.sql.parambyname(´valor1´).asstring := ´¬´ if combobox2.text <> ´´ then qry.sql.parambyname(´valor2´).asstring := combobox2.text else qry.sql.parambyname(´valor2´).asstring := ´¬´ qry.open;
GOSTEI 0
Eniorm
30/11/2006
veja no meu caso como eu faço
na hora de fazer a pesquisa, eu implemento
onde TEXTO é uma string contendo a palavra-chave a ser pesquisada!
att
SELECT CODIGO, NOME, COALESCE(MODELO,´´) AS MODELO, COALESCE(FABRICANTE,´´) AS FABRICANTE FROM PRODUTOS WHERE CODIGO LIKE :CODIGO AND NOME LIKE :NOME AND COALESCE(MODELO,´¬¬´) LIKE :MODELO AND COALESCE(FABRICANTE,´¬¬´) LIKE :FABRICANTE ORDER BY NOME
na hora de fazer a pesquisa, eu implemento
with qryPesquisa do begin Close; ParamByName(´CODIGO´).AsString := ´¬¬´; ParamByName(´NOME´).AsString := ´¬¬´; ParamByName(´MODELO´).AsString := ´¬¬´; ParamByName(´FABRICANTE´).AsString := ´¬¬´; case RadioGroup1.ItemIndex of 0 : ParamByName(´CODIGO´).AsString := texto; 1, 2, 3 : ParamByName(RadioGroup1.Items[RadioGroup1.ItemIndex]).AsString := texto+´¬´; end; Open; if not IsEmpty then DBGrid1.SetFocus; end;
onde TEXTO é uma string contendo a palavra-chave a ser pesquisada!
att
GOSTEI 0