Fórum Filtro SQL com 3 condições (era: Logica..) #333992

30/11/2006

0

[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

Nightshade

Responder

Posts

01/12/2006

Denis

Já pensou em usar uma Stored procedure ?


Responder

Gostei + 0

04/12/2006

Emerson Nascimento

olha, creio que não tem como você fugir dos if´s...
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;
mas a idéia da função é muito boa.


Responder

Gostei + 0

05/12/2006

Eniorm

veja no meu caso como eu faço

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


Responder

Gostei + 0

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

Aceitar