Somar uma coluna no DBGrid

Delphi

01/09/2005

Olá pessoal tudo bem?

Gostaria de saber se tem como somar uma coluna no dbGrid, tipo assim, pegar a coluna Valor Total, somá-la toda e aparecer num label ou dbEdit.

Agradeço antecipadamente.

Abraços :)


Edibertoalves

Edibertoalves

Curtidas 0

Respostas

Nandolh

Nandolh

01/09/2005

Se vc estiver utilizando dbExpress - ClientDataSet, crie um campo agregado...


GOSTEI 0
Demetrius

Demetrius

01/09/2005

Utilize esse código:

var 
Total: Currency; 
begin 
Total := 0; 
DataModule.NomeTabela.DisableControls; 
try 
while not DataModule.NomeTabela.EOF do begin 
Total := Total + DataModule.NomeTabela.FieldByName(´NomeDoCampoASomar´).AsCurrency; 
DataModule.NomeTabela.Next; 
end; 
finally 
DataModule.NomeTabela.EnableControls; 
Edit1.Text := FormatFloat(´#,0.00´, Total); 
end;


Eu uso e sempre funciona.

:D


GOSTEI 0
Nandolh

Nandolh

01/09/2005

Desculpe discordar de vc Demetrius, mas esta forma deixa a aplicação muito lenta. Imagine se vc tiver uns 1000 registros na tabela, levaria uma eternidade. O ideal são campos agregados.


GOSTEI 0
Demetrius

Demetrius

01/09/2005

O programa é para somar mensalão????? :D


GOSTEI 0
Edibertoalves

Edibertoalves

01/09/2005

olá amigos,
tem algum exemplo usando campos agregados e aonde devo implementar???

Estou usando DataSet + DataSetProvider + ClientDataSet
Componentes da FIBPlus.

Obrigado :wink:


GOSTEI 0
Nandolh

Nandolh

01/09/2005

Hehehehehe gostei da colocação Demetrius...


GOSTEI 0
Nandolh

Nandolh

01/09/2005

Olhe em http://www.comunidade-firebird.org/cflp/downloads/CFLP_T002.PDF
O artigo acima é para os Interbase Express. Mas ele ensina como adicionar e utilizar Agregados em um ClientDataSet.

Procure pela parte que fala de ´Campo agregados´

Boa sorte


GOSTEI 0
Edibertoalves

Edibertoalves

01/09/2005

Demetrius,

Aonde ou qual evento eu irei colocar esse código?????
No clientdataset???

Obrigado :)


GOSTEI 0
Demetrius

Demetrius

01/09/2005

Faça o seguinte:

Abaixo da clausula private crie uma procedure

private
procedure Soma_Coluna;

Depois precione ctrl+c;

no procedure criado coloque o código adaptado as suas necessidade.

crie um botão e coloque no evento onclick
Soma_coluna.

depois é só executar


GOSTEI 0
Edibertoalves

Edibertoalves

01/09/2005

Demetrius,

Gostaria de que fosse automático, ou seja, o usuário vai entrando com os valores e o dbEdit vai recebendo a somatória dos valores.
Em qual evento do dbEdit eu colocaria essa Soma_Coluna ???

Obrigado :wink:


GOSTEI 0
Demetrius

Demetrius

01/09/2005

Faça o seguinte.

Copie o codigo e coloque no evento onexit do edit que vc entra com o valor.

Ex:

vc esta cadastrando uma conta, coloca o valor a ser pago, quando vc der enter e mudar de componente o calculo será realizado automaticamente.

se não conseguir mande-me seu e-mail que amanhã envio para vc um exemplo


GOSTEI 0
Edibertoalves

Edibertoalves

01/09/2005

Olá Demétrius, o exemplo não funcionou!!! :cry:

Gostaria sim, pode me enviar um exemplo???

meu email é ediberto_alves@yahoo.com.br

Obrigado :wink:


GOSTEI 0
Nandolh

Nandolh

01/09/2005

Vai ficar lento!!!

Mas se ainda insiste... Boa sorte :)


GOSTEI 0
Martins

Martins

01/09/2005

Se vc tivesse utilizando campo agregado, toda vez q vc inserisse algo em seu dataset, o valor automaticamente seria adicionado a ele, sempre somando.

vale dar uma estudada na idéia.


Martins


GOSTEI 0
Edibertoalves

Edibertoalves

01/09/2005

Olá Nando e Martins, tudo bem?

Tenho duas tabelas: ProdutosPedidos e Pedidos, o usuário vai entrar com a quantidade * valor unitário, e na coluna seguinte no ´Valor Total´ seria o resultado disso. Esses 3 campos são de origem da tabela ProdutosPedidos.

Então o que gostaria é o seguinte: Pegar toda a somatória da coluna ´Valor Total´ da tabela ProdutosPedidos e jogar para a tabela Pedidos onde nessa tabela tem um campo chamado ´ValortotaldoPedido´.

Tem alguma idéia onde eu possa fazer isso, pode ser usando os campos agregados???? Se sim, como poderia fazer.Dei uma estudada sobre a apostila que o Martins passou mas estou errando na implementação

O que faço???

Obrigado.


GOSTEI 0
Martins

Martins

01/09/2005

Olá Nando e Martins, tudo bem? Tenho duas tabelas: ProdutosPedidos e Pedidos, o usuário vai entrar com a quantidade * valor unitário, e na coluna seguinte no ´Valor Total´ seria o resultado disso. Esses 3 campos são de origem da tabela ProdutosPedidos. Então o que gostaria é o seguinte: Pegar toda a somatória da coluna ´Valor Total´ da tabela ProdutosPedidos e jogar para a tabela Pedidos onde nessa tabela tem um campo chamado ´ValortotaldoPedido´. Tem alguma idéia onde eu possa fazer isso, pode ser usando os campos agregados???? Se sim, como poderia fazer.Dei uma estudada sobre a apostila que o Martins passou mas estou errando na implementação O que faço??? Obrigado.


vc gostaria de passar só o total geral ou total de cada pedido?


GOSTEI 0
Martins

Martins

01/09/2005

Só complementando, se o seu problema for passar o valor total geral tem como, se for do jeito q está na outra table tb, e quanto aos campos agregados e calculados, melhor do q eu postar aqui um exemplo, é postar o link de um colunista do clube delphi, tá aqui em baixo o link.

[url]http://www.clubedelphi.net/portal/artigos/lichot/11.asp[/url]

Espero q te ajude.

Boa sorte!!


GOSTEI 0
Edibertoalves

Edibertoalves

01/09/2005

Olá Martins!

Quero pegar o valor total geral de todos os itens, da coluna ´ValorTotal´ da tabela ProdutosPedidos.
Com esse total geral, esse resultado, vai ser jogado num campo ValorTotaldoPedido, da tabela Pedidos e, sendo exibido através de um label ou dbEdit.

O que pode ser feito???

Obrigado :wink:


GOSTEI 0
POSTAR