Fórum Retornar dados consulta / relatório #408547

18/10/2011

0

Olá amigos Delpianos!
Tenho 2 tbls Receita e Saida preciso fazer a consulta por uma determinada data onde depois de trazer os dados na tela via dbgrid me mostre o saldo e na sequencia eu chame o relatário Qreport que ira visualizar o saldo antes de imprimir abaixo o código que estou tentando e não está dando certo, gostaria que aparecesse pelo menos assim: TOTAL - SUBTOTAL=SALDO.

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(Select SUM(Frete+Frete1+Frete2)as TOTAL From Receita UNION ALL Select (OilGas+Auxiliar+Refeicao+Conserto+Imposto) from Saida);
Query1.SQL.Add(Where DATA between :Inicial and :Final);
Query1.Parameters.ParamByName(Inicial).Value := StrToDate(MaskEdit0.Text);
Query1.Parameters.ParamByName(Final).Value := StrToDate(MaskEdit1.text);
Query1.Open;
If Query1.isEmpty then
ShowMessage(Não há registros entre as datas informadas!);

//Aqui faço a consulta porem só aparece o valor dentro do campo total, subtotal e saldo está em branco, onde estou errando?... abaixo chamo o relatório que falta fazer ajustes ele até funciona!

procedure TForm1.btnRelSaldoClick(Sender: TObject);
begin
Form1.Query1.Close;
Form1.Query1.SQL.Clear;
Form1.Query1.SQL.Add(Select SUM(Frete+Frete1+Frete2)as TOTAL From Receita UNION ALL Select SUM (OilGas)as SUBTOTAL From Saida);
Form1.Query1.SQL.Add(Where DATA between :Inicial and :Final);
Form1.Query1.Parameters.ParamByName(Inicial).Value := StrToDate(MaskEdit0.Text);
Form1.Query1.Parameters.ParamByName(Final).Value := StrToDate(MaskEdit1.text);
Form1.Query1.ExecSQL;
if Query1.IsEmpty then
ShowMessage(Não há dados para serem mostrados no relatório)
else
frmRelSaldo.QuickRepSaldo.Preview;

end;

Delphi 7 bd Acess 2003
Lauro

Lauro

Responder

Posts

19/10/2011

Geversom Sousa

a sua consulta usando UNION não conseguirá retornar os valores da maneira como você deseja,recomendo que você use um sub-consulta, conforme exemplo abaixo:



procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   Query1.Close;
   Query1.SQL.Clear;
   Query1.SQL.Add( Select SUM(RC.Frete + RC. Frete1 + RC.Frete2 ) as TOTAL,                             );
   Query1.SQL.Add(        (Select SUM(SD.OilGas + SD.Auxiliar + SD.Refeicao + SD.Conserto + SD.Imposto) );
   Query1.SQL.Add(           from Saida SD                                                              );
   Query1.SQL.Add(          Where SD.DATA between :Inicial and :Final) as SUBTOTAL                      );
   Query1.SQL.Add(   From Receita RC                                                                    );
   Query1.SQL.Add(  Where RC.DATA between :Inicial and :Final                                           );
   Query1.Parameters.ParamByName(Inicial).Value := StrToDate(MaskEdit0.Text);
   Query1.Parameters.ParamByName(Final).Value := StrToDate(MaskEdit1.text);
   Query1.Open;
   If Query1.isEmpty then
   ShowMessage(Não há registros entre as datas informadas!);
end.



Recomendo que você use sempre Alias para as tabelas, o que facilita a compreensão do codigo
Responder

Gostei + 0

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

Aceitar