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!
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
Curtir tópico
+ 0
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:
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
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!
realmente é menos trabalhoso e menos embaraçoso organizando os ifs
Valeu!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)