Fórum Fazer uma consulta com várias condições mais rápido? #285594

21/06/2005

0

Olá pessoal, tenho a seguinte dúvida:
No sistema q estou desenvolvendo uma consulta onde tenho os campos definidos q vão aparecer numa grid. Essa consulta eu coloquei com 3 campos (edits) de condições pra executa-la, fiz a consulta da seguinte maneira, ex:

with DM.qryAux do
begin
if ((edit1.tex = ´´) and (edit2.tex = ´´) and (edit3.tex = ´´)) then
begin
Close;
SQL.Clear;
SQL.Add(´ select * from VW_NomedaView ´);
SQL.Add(´ order by NomeCampo ´);
Open;
end
else if ((edit1.tex <> ´´) and (edit2.tex = ´´) and (edit3.tex = ´´)) then
begin
Close;
SQL.Clear;
SQL.Add(´ select * from VW_NomedaView ´);
SQL.Add(´ Where NomeCampo1 LIKE ´´´+ edit1.Text +´¬´´ ´);
SQL.Add(´ order by NomeCampo1 ´);
Open;
end;
else if ((edit1.tex = ´´) and (edit2.tex <> ´´) and (edit3.tex = ´´)) then
begin
Close;
SQL.Clear;
SQL.Add(´ select * from VW_NomedaView ´);
SQL.Add(´ Where NomeCampo2 LIKE ´´´+ edit2.Text +´¬´´ ´);
SQL.Add(´ order by NomeCampo2 ´);
Open;
end;
.
.
.
e assim por diante, prevendo todas as possibilidades de preenchimento dos campos pelo usuário.

end;

Gostaria de saber se dessa forma é correto e se tem uma outra forma mais simples e rápido de fazer essa consulta.

Obrigado!


Rssampaio

Rssampaio

Responder

Posts

21/06/2005

Jairroberto

Olá, rssampaio!

O código está correto. O que dá para sugerir é a reescrita dos ifs destacando as linhas comuns:

with DM.qryAux do 
begin 
  Close; 
  SQL.Clear; 
  SQL.Add(´select * from VW_NomedaView ´);

  if ((edit1.tex = ´´) and (edit2.tex = ´´) and (edit3.tex = ´´)) then 
    SQL.Add(´ order by NomeCampo ´)
  else
  if ((edit1.text <> ´´) and (edit2.tex = ´´) and (edit3.tex = ´´)) then 
  begin 
    SQL.Add(´ Where NomeCampo1 LIKE ´´´+ edit1.Text +´¬´´ ´); 
    SQL.Add(´ order by NomeCampo1 ´); 
  end
  else
  if ((edit1.tex = ´´) and (edit2.tex <> ´´) and (edit3.tex = ´´)) then 
  begin 
    SQL.Add(´ Where NomeCampo2 LIKE ´´´+ edit2.Text +´¬´´ ´); 
    SQL.Add(´ order by NomeCampo2 ´); 
  end;

  Open;
end;


Você também pode gerar a cláusula WHERE considerando o preenchimento de mais de um Edit ao mesmo tempo usando a mesma lógica.


Um abraço,
Jair


Responder

Gostei + 0

22/06/2005

Rssampaio

Obrigado JairRoberto!
realmente é menos trabalhoso e menos embaraçoso organizando os ifs

Valeu!


Responder

Gostei + 0

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

Aceitar