 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
almir.jg Novato

Registrado: Quarta-Feira, 3 de Março de 2004 Mensagens: 87
|
Enviada: Sex Mai 23, 2014 1:10 pm Assunto: DBGRID com Saldo Anterior |
|
|
Ola para todos
Estou construindo um sistema financeiro, neste sistema tenho a conciliação bancária, para cada conta editada tenho um formulário onde são apresentados todos os lançamentos para cada conta, (data, historico, D/C e valor do lancamento). Me falta a coluna com o SALDO ATUAL. É ai que o "bicho pega". Vamos lá então:
Não estou procurando aqui um calculo para se fazer o Saldo atual, nem criar uma stored procedure para construir esta funcionalidade mas sim, tentando entender "o como fazer" utilizando um CalcFieds, para que este saldo seja apresentado de forma dinamica.
| Código: |
procedure TFrmEditConta.qLctBeforeOpen(DataSet: TDataSet);
begin
vSaldo_Anterior := qrySLD_ABERTURA.AsCurrency;
end;
|
| Código: |
procedure TFrmEditConta.qLctCalcFields(DataSet: TDataSet);
begin
qLctSaldo_Atual.Value := vSaldo_Anterior + qLctVLR_MOVIMENTO.AsCurrency;
vSaldo_Anterior := qLctSaldo_Atual.AsCurrency;
end;
|
1)Começo o procedimento criando uma variavel "SALDO ANTERIOR" e populo éla com o saldo desejado.
2)Criei um campo (CALCULATED) tipo currency "SALDO_ATUAL" na query dos lançamentos.
3)No CalcFields da query dos lançamentos efetuo o seguinte calculo:
3.1) Populo o SALDO ATUAL com o valor do SALDO ANTERIOR + o VALOR DO MOVIMENTO.
3.2) Em seguida repopulo o SALDO_ANTERIOR com o valor do SALDO_ATUAL, para que este saldo anterior possa ser utilizado na proxima linha.
Até este momento tudo ocorreu perfeitamente "como manda o figurino".
O problema esta quando faço a rolagem do GRID. A variavel SALDO_ANTERIOR perde seu valor e da um efeito em castata para todo o SALDO_ATUAL do GRID.
Se alguem tiver uma me avisem.
Algumas premissas para o que estou desenvolvendo:
1. Tem que ser DBGRID.
2. Tem que ser de forma dinamica.
3. Não pode ser stored procedure (o sistema é multi banco)-(ai fica fácil).
4. Não necessariamente tem que ser no CALCFIELDS.
Talvez o meu entendimendo do funcionamento do CALCFIELDS não seja suficiente para esta implementação.
Ajudas pequenas ou grandes serão bem vindas, só peço que atentem ao enunciado.
Valew.  |
|
| Voltar ao Topo |
|
 |
almir.jg Novato

Registrado: Quarta-Feira, 3 de Março de 2004 Mensagens: 87
|
Enviada: Sex Mai 23, 2014 5:16 pm Assunto: Complementando |
|
|
Estou fazendo um estudo sobre o evento CALCFIELDS. Hoje passei a tarde lendo e procurando entendimento sobre o assunto, descobri algumas coisas interessantes que são:
Propriedade do DATASET: AutoCalcFields = FALSE --> Determina quando e como o evento ONCALCFIELDS é acionado e, pode ser acionado quando:
O conjunto de dados é aberto.
O conjunto de dados é colocado em estado DSEDIT .
Um registro é recuperado de um banco de dados
AutoCalcFields=TRUE
Quando o focomuda de um controle visual para outro
Quando reordenar a o grid
Quando alterar a largura de uma coluna, etc.
Se um aplicativo permite que os usuários alterem dados , OnCalcFields é freqüentemente acionado. Nestes casos, um aplicativo pode definir AutoCalcFields para False para reduzir a freqüência com que o evento ocorre OnCalcFields e com os quais a pesquisa valores são buscadas.
CUIDADO: Não faça alterações no DATASET proprietário do CALCFIELDS (dentro dele) isto irá gerar uma chamada recursiva.
Fonte: http://docwiki.embarcadero.com/Libraries/XE5/en/Data.DB.TDataSet.AutoCalcFields
Bem hoje aprendi mais um pouco e resolvi compartilhar.
Ainda não desisti de tentar obter o efeito desejado através deste evento.
Escreva, coloque a sua mensagem.  |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|