Somar um campo e exibir em um edit

Delphi

28/04/2007

Tenho uma tabela de vendas com um campo chamado total que é o valor total de cada venda. Como posso somar todos os totais e exibir em um edit ou label?
Estou usando ADOQuery, MySQL e Delphi 2006.


Mcsmarmcs

Mcsmarmcs

Curtidas 0

Respostas

Paullsoftware

Paullsoftware

28/04/2007

creio que é só fazer uma varredura na taleba...
procedure TfLocacao.Total;
begin
vTotal:=0;
With DM_BANCO do
     begin
          DETLOCACAO.First;
          While Not DETLOCACAO.Eof do
                begin
               if  DETLOCACAO.FieldByName(´BONUS´).AsString = ´N´ Then
                vTotal := vTotal + DETLOCACAO.FieldbyName(´VALOR_FILME´).AsCurrency;
                DETLOCACAO.Next;
                end;
          vTotal := vTotal;
          LOCACAO.Edit;
          LOCACAOTotal.Value := vTotal;
          LOCACAO.Post;
          LOCACAO.ApplyUpdates;
     end;
//n1
// lblTotal.Caption := ´R$ ´ + FormatFloat(´#,,0.00´,vTotal);
end;

hoje não faço mais assim, mais a lógica é essa, espero ter ajudado :wink:


GOSTEI 0
Mcsmarmcs

Mcsmarmcs

28/04/2007

Funcionou, excelente!
Só uma pergunta: vc disse q não faz mais desta forma, como vc faz então?


GOSTEI 0
Mcsmarmcs

Mcsmarmcs

28/04/2007

Resolvi o problema que queria, mais ainda pode ficar melhor.
O código abaixo precisa aparecer 12 vezes, pois seria uma vez pra cada mês, mas certamente teria como compactar isso. Eu preciso exibir a soma de cada mês em um campo edit diferente.

procedure Tgrafvendas.BitBtn2Click(Sender: TObject);
var
vTotal: double;
begin
vTotal:=0;
dm.consvendas.Close;
dm.consvendas.SQL.Clear;
dm.consvendas.SQL.Add(´SELECT * FROM vendas WHERE EXTRACT(MONTH FROM data_venda) = 2´);
dm.consvendas.Open;
dm.consvendas.First;
While Not dm.consvendas.Eof do
begin
if dm.consvendas.FieldByName(´total´).AsString <> ´0´ then
vTotal := vTotal + dm.consvendas.FieldbyName(´total´).AsCurrency;
dm.consvendas.Next;
end;
vTotal := vTotal;
edit2.Text := ´R$ ´ + FormatFloat(´#,,0.00´,vTotal);}
end;


GOSTEI 0
Marco Salles

Marco Salles

28/04/2007

Isto mesmo , mas use o Sum pô

procedure Tgrafvendas.BitBtn2Click(Sender: TObject); 
begin 
vTotal:=0; 
dm.consvendas.Close; 
dm.consvendas.SQL.Clear; 
dm.consvendas.SQL.Add(´SELECT Sum(Total) as Soma FROM vendas WHERE EXTRACT(MONTH FROM data_venda) = 2´); 
dm.consvendas.Open; 
edit2.Text := currencyString + FormatFloat(´#,,0.00´,
dm.consvendas.fieldByName(´Soma´).ascurrency);} 
end;


A unica sugestão , que voce pode criar um DataSet para este processo , efetuar esta soma e depois destrui-lo.. Aqui estou usando o seu DataSet [u:2566545a33]dm.consvendas[/u:2566545a33] , que [b:2566545a33]não[/b:2566545a33] deve ter nenhum field definido no seu editor de fields.. Senão da erro..



GOSTEI 0
Paullsoftware

Paullsoftware

28/04/2007

creio que o Marcos responde pra mim... assim é bem mais rápido e o ponteiro não sai do registro!


GOSTEI 0
Mcsmarmcs

Mcsmarmcs

28/04/2007

O comando SUM não é necessário, pois vTotal já vai somar todos os campos da coluna. Da forma como está já funciona perfeitamente.
Valeu pela atenção!


GOSTEI 0
Marco Salles

Marco Salles

28/04/2007

citação de mcsmarmcs
Resolvi o problema que queria, mais ainda pode ficar melhor. O código abaixo precisa aparecer 12 vezes, pois seria uma vez pra cada mês, mas certamente teria como compactar isso. Eu preciso exibir a soma de cada mês em um campo edit diferente.


citação de Amcro salles
Isto mesmo , mas use


citação de paullsoftware
creio que o Marcos responde pra mim... assim é bem mais rápido e o ponteiro não sai do registro!


citaçao de mcsmarmcs
O comando SUM não é necessário, pois vTotal já vai somar todos os campos da coluna. Da forma como está já funciona perfeitamente.


Veja , da maneira que voce fez usando um Sql para acessar o Base de Dados

dm.consvendas.SQL.Add(´SELECT * FROM vendas WHERE EXTRACT(MONTH FROM data_venda) = 2´);


[u:e2e10bacb6]acho que voce deve usar o Sum [/u:e2e10bacb6], ao invez do While.. Em pequenas aplicaçoes desktop , com base de dados pequena , pode não perceber diferença. Mas sua performace pode ser prejudicada se não usar o Sum em muitas oputra situaçoes


GOSTEI 0
Mcsmarmcs

Mcsmarmcs

28/04/2007

Levando-se em conta o desempenho, realmente vale a pena usar o SUM.


GOSTEI 0
POSTAR