AQL Quero somar o valor de uma (coluna) quando a data for = a data de hoje

Delphi

24/09/2014

Estou usando esse código, ele esta no onshow do form mas .... aparece uma mensagem " ADOQuery1ap field 'código' not found"
não sei mais o que eu faço ... quando eu tiro o close,open, ela abre mas não funciona ... algem pode me ajudar ?


begin
var
hoje: TDateTime;
resu: real;
begin
ADOQuery1ap.Close;
ADOQuery1ap.SQL.Clear;
ADOQuery1ap.SQL.Text:= 'SELECT Sum(valor) AS Expr1 FROM cont_a_pagar ' + 'where data_da_compra= :total ;
ADOQuery1ap.Parameters.ParamByName('total').Value:= ,StrToDate(hoje);
ADOQuery1ap.ExecSQL;
ADOQuery1ap.Open;
resu:= ADOQuery1ap.FieldByName('Expr1').AsFloat;
edit5.Text:=formatfloat ('#,##0.00',resu) ;
Gabriel Silva

Gabriel Silva

Curtidas 0

Respostas

Ricardo

Ricardo

24/09/2014

Retire a linha do Exec.Sql, pois nunca deve existir quando a instrução é Select.

ADOQuery1ap field 'código' not found" = O campo código não está sendo selecionado pela instrução.

tente: 'SELECT *, Sum(valor) AS Expr1 FROM cont_a_pagar where data_da_compra = :total' ;
GOSTEI 0
Gabriel Silva

Gabriel Silva

24/09/2014

cara ta quase dando certo ....
coloquei esse codigo ... mas ta dando que nao existe a expressao Expr1 ... ai tipo si eu tirar a linha do edit5.text .... funciona normal ...
e si eu colocar um close, open ela ja da o problema do codigo
e si eu deixar o select com " *, " da um outro erro

begin
hoje:= now;
ADOQuery1ap.SQL.Clear;
ADOQuery1ap.SQL.Add('SELECT Sum(valor) AS Expr1 FROM cont_a_pagar where data_da_compra = :total' );
ADOQuery1ap.Parameters.ParamByName('total').Value:= datetostr(hoje);
// SELECT *, Sum(valor) AS Expr1 FROM cont_a_pagar where data_da_compra = :total' ;
edit5.Text:= ADOQuery1ap.FieldByName('Expr1').AsString;
ADOQuery1ap.Close;
ADOQuery1ap.SQL.Clear;
ADOQuery1ap.SQL.Add ('SELECT * from cont_a_pagar') ;
ADOQuery1ap.Open;
ADOQuery1ap.ExecSQL;
GOSTEI 0
Ricardo

Ricardo

24/09/2014

Vamos lá novamente.

ADOQuery1ap.ExecSQL, pode esquecer. Não existe quando a instrução SQL for o Select, é usada apenas para insert, update, delete etc.

ADOQuery1ap.Close tem que ser antes do sql.clear.

Você esta fazendo compraração entre datas. Então veja uma diferença: now = data e hora, date = data. Então hoje := date;



var
hoje, resu : String;

begin
hoje := DateToStr(date);

with ADOQuery1ap do
begin
Close;
SQL.Clear;
SQL.ADD('SELECT *, Sum(valor) as Expr1 from cont_a_pagar where data_da_compra= :Phoje') ;
Params.ParamByName('Phoje').Value := hoje;
Open;
end;

resu := ADOQuery1ap.FieldByName('Expr1').AsFloat;
edit5.text := FormatFloat ('###,##0.00',resu);
end;
GOSTEI 0
Ricardo

Ricardo

24/09/2014

Vamos lá novamente.

ADOQuery1ap.ExecSQL, pode esquecer. Não existe quando a instrução SQL for o Select, é usada apenas para insert, update, delete etc.

ADOQuery1ap.Close tem que ser antes do sql.clear.

Você esta fazendo compraração entre datas. Então veja uma diferença: now = data e hora, date = data. Então hoje := date;



var
hoje, resu : String;

begin
hoje := DateToStr(date);

with ADOQuery1ap do
begin
Close;
SQL.Clear;
SQL.ADD('SELECT *, Sum(valor) as Expr1 from cont_a_pagar where data_da_compra= :Phoje') ;
Params.ParamByName('Phoje').Value := hoje;
Open;
end;

resu := ADOQuery1ap.FieldByName('Expr1').AsFloat;
edit5.text := FormatFloat ('###,##0.00',resu);
end;
GOSTEI 0
Gabriel Silva

Gabriel Silva

24/09/2014

eu consegui aqui .... so to com um outro problema ....
suponhamos que eu tenho uma conta que vence hoje dia 30/09/2014
eu quero que em um edit apareça a data de vencimento da proxima conta. por exempro
si essa vence dia 30/09/2014 eu quero que me mostre a de 02/10/2014 e si possivel a soma de todas as contas dessa derminada data.

obs: isso nao é between nao é comparação... é simplesmente uma verificação da data posterior . desde ja agradeço
GOSTEI 0
POSTAR