Fórum Como fazer um campo Acumulativo? #274735

30/03/2005

0

Meus Amigos,

Aí vai a terceira tentativa. Desse jeito vou acabar desistindo do DELPHI.
Estou usando ADO com Access e em uma tabela de despesas estou inserindo diariamente registros com valores. Gostaria de ver nesta tela um campo onde eu somo todos os registros e apresento o valor total.
Como Fazer?

Já tentei ONCALCFIELDS, Lendo toda a tabela e somando a variavel, mas nao funciona. Se alguem tiver um exemplo pratico agradeço

Alex


Alexsandro

Alexsandro

Responder

Posts

30/03/2005

Aroldo Zanela

Colega,

Apesar de faltar muitas informações para tentar demonstrar uma solução, farei um exemplo hipotético.

Tabela: DESPESAS

Colunas: VENCIMENTO(D), DESCRICAO(CHAR(40)), VALOR(Numeric,15,2)

Obtendo o total:

SELECT SUM(VALOR) AS TOTAL
FROM DESPESAS


Portanto, é desnecessário criar um campo para manter totais.


Responder

Gostei + 0

31/03/2005

Alexsandro

Oi Colega,

Agradeço sua ajuda, mas a parte que define a soma até sei fazer. O problema é que não sei em que evento deveo chamar a Query para que os valores se mantenham sempre atualizados, seja depois de uma inclusão, exclusão ou alteração.

Agradeço se você me passar uma dica. Tentei Afterpost, afterinsert, afterdelete mas só tive problemas. Por isso pensei no ONCALCFIELDS, mas percebi que este evento executa um calculo POR REGISTRO e não PARA A TABELA INTEIRA.

oBRG.

Alex


Responder

Gostei + 0

31/03/2005

Kotho

Acho que eu já dei a minha sujestão, mas parece que você não foi com a cara dela....

crie um campo aggreggate, e para apresentar na tela, utilize um DBEdit.

Esta é uma alternativa que eu utilizo, e que funciona...


Responder

Gostei + 0

31/03/2005

Alexsandro

Oi Kotho e amigos,

Não é que não fui com sua solução. É que não entendi como fazer. (: (Sou leigo em Delphi - apenas 1 mês).

Você poderia me ajudar me explicando com mais detalhes?

Meu caso em uma tela onde cadastro das despesas diárias de viagem tem uma subjanela onde mostro os totais gastos com:
- DINHEIRO
- CARTÃO
- CHEQUE

A Medida que o usuário vai incluindo novos registros desejo que estes campos sejam atualizados com o valor total das Despesas. Exemplo: Se até hoje o Total em Dinheiro é 1000 e entro com uma despesa de 300, logo depois da inclusão automaticamente este campo deveria ficar com R$1300,00. Se algum registro for excluido ou modificado que os valores mudem também. Note que preciso verificar o TIPO DE PAGAMENTO (Dinheiro, Cheque ou Cartão) ANTES DE FAZER A SOMA. por isso achei que seria melhor usar QUERIES.

Ficarei muito grato por qualquer ajuda pois este sproblema já está a mais de 5 dias e não consigo resolver.

Alex


Responder

Gostei + 0

31/03/2005

Kotho

ok... vamos lá....

1) incluir um novo campo no seu DataSet (não sei se é uma Query ou Table, mas tanto faz)... você deverá informar o nome do campo e depois clicar no Aggreggate.

2) Selecionando esse campo (que fica na parte inferior do FieldsEditor), ele possui a propriedade Expression... coloque SUM(NOME_DO_CAMPO).

3) Outra propriedade importante do campo é Active... sete para True.

4) Agora no DataSet, sete AggreggatesActive para True...

5) Inclua um DBEdit no form... e sete ReadOnly para True, e TabStop para False... e ligue-o ao campo Aggreggate

Acho que é só isso... se não funcionar alguma coisa... ou se não entendeu algum passo... poste que iremos explicar... ok? :D


Responder

Gostei + 0

01/04/2005

Kotho

Alex, eu vou citar a sua MP para constar como pergunda

OI Kotho, Obrigado pela Ajuda: 1) Como faço para atualizar essa propriedade? Onde encontro o DATASET? Desculpe a ignorancia: - Agora no DataSet, sete AggreggatesActive para True... 2) Sobre a expressão SUM(CAMPO) no meu caso quero fazer três somas: EM dinhero, Cheque e Cartão, como faço para implementar uma expressão do Tipo SUM(DES_VALOR where DES_TIPO = ´DI´ ) Dinheiro Muito Obrg. pela ajuda, Alex


1) Quais componentes você está utilizando??? E eu queria pedir desculpas, pois eu utilizo os componentes do DBExpress... e o campo Aggregate só tem no ClientDataSet, então você somente irá conseguir utilizar este recurso se o estiver utilizando...


Responder

Gostei + 0

05/04/2005

Aroldo Zanela

Oi Kotho e amigos, Não é que não fui com sua solução. É que não entendi como fazer. (: (Sou leigo em Delphi - apenas 1 mês). Você poderia me ajudar me explicando com mais detalhes? Meu caso em uma tela onde cadastro das despesas diárias de viagem tem uma subjanela onde mostro os totais gastos com: - DINHEIRO - CARTÃO - CHEQUE

SELECT xCAMPO, SUM(VALOR)
FROM xTABELA
WHERE xCONDICAO <CHAVE>
GROUP BY xCAMPO

A Medida que o usuário vai incluindo novos registros desejo que estes campos sejam atualizados com o valor total das Despesas. Exemplo: Se até hoje o Total em Dinheiro é 1000 e entro com uma despesa de 300, logo depois da inclusão automaticamente este campo deveria ficar com R$1300,00. Se algum registro for excluido ou modificado que os valores mudem também. Note que preciso verificar o TIPO DE PAGAMENTO (Dinheiro, Cheque ou Cartão) ANTES DE FAZER A SOMA. por isso achei que seria melhor usar QUERIES. Ficarei muito grato por qualquer ajuda pois este sproblema já está a mais de 5 dias e não consigo resolver. Alex

Coloque no OnAfterScroll
FechaQuery;
Passa Parâmetros;
AbreQuery;

Por favor, vamos continuar nesta thread até a solução final deste assunto.


Responder

Gostei + 0

05/04/2005

Aroldo Zanela

Colega,

Coloque a DDL (Estrutura da tabela) para que possamos ententer melhor.


Responder

Gostei + 0

05/04/2005

Anfm

Oi Colega, Agradeço sua ajuda, mas a parte que define a soma até sei fazer. O problema é que não sei em que evento deveo chamar a Query para que os valores se mantenham sempre atualizados, seja depois de uma inclusão, exclusão ou alteração. Agradeço se você me passar uma dica. Tentei Afterpost, afterinsert, afterdelete mas só tive problemas. Por isso pensei no ONCALCFIELDS, mas percebi que este evento executa um calculo POR REGISTRO e não PARA A TABELA INTEIRA. oBRG. Alex


Vc poderia chamar este evento no OnDataChange do datasource q vc está utilizando na tabela principal.


Responder

Gostei + 0

05/04/2005

Gandalf.nho

[b:93702f63cf][color=red:93702f63cf]Bloqueado por Infração às Regras de Conduta :[/color:93702f63cf][/b:93702f63cf]

Duplicidade
[url]http://forum.clubedelphi.net/viewtopic.php?t=61107[/url]

Para maiores esclarecimentos pode mandar-me uma [url=http://forum.clubedelphi.net/privmsg.php?mode=post&u=8378]Mensagem Particular[/url].


Responder

Gostei + 0

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

Aceitar