GARANTIR DESCONTO

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.


Jose

Jose

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]


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.


Responder

Gostei + 0

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

Aceitar