Somar um campo e exibir em um edit
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.
Estou usando ADOQuery, MySQL e Delphi 2006.
Mcsmarmcs
Curtidas 0
Respostas
Paullsoftware
28/04/2007
creio que é só fazer uma varredura na taleba...
hoje não faço mais assim, mais a lógica é essa, espero ter ajudado :wink:
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
28/04/2007
Funcionou, excelente!
Só uma pergunta: vc disse q não faz mais desta forma, como vc faz então?
Só uma pergunta: vc disse q não faz mais desta forma, como vc faz então?
GOSTEI 0
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;
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
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
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
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!
Valeu pela atenção!
GOSTEI 0
Marco Salles
28/04/2007
citação de mcsmarmcs
citação de Amcro salles
citação de paullsoftware
citaçao de mcsmarmcs
Veja , da maneira que voce fez usando um Sql para acessar o Base de Dados
[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
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
28/04/2007
Levando-se em conta o desempenho, realmente vale a pena usar o SUM.
GOSTEI 0