Fórum Consulta e possivel? #182274
15/09/2003
0
Estou usando essa consulta
q1.SQL.Clear;
q2.Close;
q2.SQL.Clear;
q1.sql.Add(´Select * From tlbServExecutado Where Tecnico Like :Tec And DtaExe Between :Data1 And :Data2´);
q2.SQL.Add(´Select Sum(tlbServExecutado.ValorServ) As Total, Sum(tlbServExecutado.ValorTotl) As Gera From tlbServExecutado Where Tecnico Like :Tec And DtaExe Between :Data1 And :Data2´);
q1.Parameters.ParamByName(´Tec´).Value:=Edit1.Text;
q1.Parameters.ParamByName(´Data1´).Value:=MaskEdit1.Text;
q1.Parameters.ParamByName(´Data2´).Value:=Maskedit2.Text;
q2.Parameters.ParamByName(´Tec´).Value:=Edit1.Text;
q2.Parameters.ParamByName(´Data1´).Value:=MaskEdit1.Text;
q2.Parameters.ParamByName(´Data2´).Value:=Maskedit2.Text;
q1.Open;
q2.Open;
Gostaria de saber se e possivel executa-la com um unico ´ SELECT´ e tambem como fazer para exibir o resultado quando nao informar nada no parametro ´ Tec´
Obrigado.
q1.SQL.Clear;
q2.Close;
q2.SQL.Clear;
q1.sql.Add(´Select * From tlbServExecutado Where Tecnico Like :Tec And DtaExe Between :Data1 And :Data2´);
q2.SQL.Add(´Select Sum(tlbServExecutado.ValorServ) As Total, Sum(tlbServExecutado.ValorTotl) As Gera From tlbServExecutado Where Tecnico Like :Tec And DtaExe Between :Data1 And :Data2´);
q1.Parameters.ParamByName(´Tec´).Value:=Edit1.Text;
q1.Parameters.ParamByName(´Data1´).Value:=MaskEdit1.Text;
q1.Parameters.ParamByName(´Data2´).Value:=Maskedit2.Text;
q2.Parameters.ParamByName(´Tec´).Value:=Edit1.Text;
q2.Parameters.ParamByName(´Data1´).Value:=MaskEdit1.Text;
q2.Parameters.ParamByName(´Data2´).Value:=Maskedit2.Text;
q1.Open;
q2.Open;
Gostaria de saber se e possivel executa-la com um unico ´ SELECT´ e tambem como fazer para exibir o resultado quando nao informar nada no parametro ´ Tec´
Obrigado.
Jose
Curtir tópico
+ 0
Responder
Posts
16/09/2003
Glauberms
Não sei responder tudo mas pelo menos a parte referente à [b:9822a67935][i:9822a67935]´para exibir o resultado quando nao informar nada no parametro ´ Tec´ ´[/i:9822a67935][/b:9822a67935]. Quando o Edit que contem o valor do parametro [b:9822a67935]Tec[/b:9822a67935] não contiver valor substivua-o por [b:9822a67935]¬[/b:9822a67935], assim o comando [b:9822a67935]like[/b:9822a67935] seguido de [b:9822a67935]¬[/b:9822a67935] listará todos os valores (igual o * para o DOS) e a consulta se dará apenas nos outros parâmetros.
Resumo:
if Edit1.Text = ´´ then param[0]:=´¬´ else param[0]:=Edit1.Text;
Obs:
[b:9822a67935]¬[/b:9822a67935] para SQL = [b:9822a67935]*[/b:9822a67935] para DOS
[b:9822a67935]_[/b:9822a67935] para SQL = [b:9822a67935]?[/b:9822a67935] para DOS
Espero que possam responder a outra parte de sua pergunta...
GlauberMS[/b]
Resumo:
if Edit1.Text = ´´ then param[0]:=´¬´ else param[0]:=Edit1.Text;
Obs:
[b:9822a67935]¬[/b:9822a67935] para SQL = [b:9822a67935]*[/b:9822a67935] para DOS
[b:9822a67935]_[/b:9822a67935] para SQL = [b:9822a67935]?[/b:9822a67935] para DOS
Espero que possam responder a outra parte de sua pergunta...
GlauberMS[/b]
Responder
Gostei + 0
16/09/2003
Basilio.sp
Caro Jose,
Sim, é possível executar esta estas duas consultas em uma única query, montando esta query do seguinte modo:
q1.Close;
q1.SQL.Clear;
q1.sql.Add(´Select * From tlbServExecutado,
Sum(tlbServExecutado.ValorServ) As Total,
Sum(tlbServExecutado.ValorTotl) As Gera
Where Tecnico Like :Tec And DtaExe Between :Data1 And :Data2´);
q1.Parameters.ParamByName(´Tec´).Value:=Edit1.Text;
q1.Parameters.ParamByName(´Data1´).Value:=MaskEdit1.Text;
q1.Parameters.ParamByName(´Data2´).Value:=Maskedit2.Text;
q1.Open;
Com relação à possibilidade de retornar valores, mesmo sem a passagem do parêmetro TEC, siga a dica dada antes e, para garantir uma melhor organização dos dados, acrescente a linha ´ GROUP BY TECNICO´ logo após o WHERE, que vai agrupar os dados por tecnico, em vez de gerar um total único, algo que seria bem coerente.
Sim, é possível executar esta estas duas consultas em uma única query, montando esta query do seguinte modo:
q1.Close;
q1.SQL.Clear;
q1.sql.Add(´Select * From tlbServExecutado,
Sum(tlbServExecutado.ValorServ) As Total,
Sum(tlbServExecutado.ValorTotl) As Gera
Where Tecnico Like :Tec And DtaExe Between :Data1 And :Data2´);
q1.Parameters.ParamByName(´Tec´).Value:=Edit1.Text;
q1.Parameters.ParamByName(´Data1´).Value:=MaskEdit1.Text;
q1.Parameters.ParamByName(´Data2´).Value:=Maskedit2.Text;
q1.Open;
Com relação à possibilidade de retornar valores, mesmo sem a passagem do parêmetro TEC, siga a dica dada antes e, para garantir uma melhor organização dos dados, acrescente a linha ´ GROUP BY TECNICO´ logo após o WHERE, que vai agrupar os dados por tecnico, em vez de gerar um total único, algo que seria bem coerente.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)