Atualizar dados no formuário após trigger no DB
Boa noite.
Sou novo em programação utilizando banco de dados, por isso não estranhem se a dúvida lhes parecer boba.
Utilizo três tabelas:
Caixa (para abertura e fechamento do caixa do sistema)
Lancamentos_Caixa (para inserir as estradas e saídas do caixa)
Saldo (para dar manutenção ao saldo atual do caixa)
No delphi eu estou utilizando o DBX4 para acesso e o banco firebird 2.1
Para visualizar o saldo atual do caixa eu criei uma view, onde, através de um DBEdit eu mostro o saldo para o usuário no formulário do caixa.
O saldo do caixa é atualizado pelo firebird através de uma trigger disparada no after insert e no after edit da tabela lancamentos_caixa.
O problema:
Não está atualizando o saldo na tela (no DB ele está atualizado), mesmo colocando um refresh na view saldo logo após o applyupdates(0) da tabela lancamentos_caixa. Porém, se eu colocar o refresh em um botão, separado do evento que salva uma inserção ou modificação nos lancamentos do caixa, o refresh atualiza normalmente o saldo na tela.
Alguém saberia me dizer qual é o procedimento correto para atualizar os dados na tela que forem provenientes de uma tabela que não seja aquela que está sendo manipulada diretamente, mas que necessitam de atualização, como no caso descrito acima?
Agradeço por sua atenção.
Volmir Lauermann
Curtidas 0
Respostas
Nigro
14/06/2011
Me parece que são transações abertas, se eu estiver certo, você ao fechar e abrir o relatório os dados aparecem, correto?
Se for isso, tente fechar os dataset´s e abrir novamente antes de puxar o relatório.
GOSTEI 0
Volmir Lauermann
14/06/2011
Me parece que são transações abertas, se eu estiver certo, você ao fechar e abrir o relatório os dados aparecem, correto?
Se for isso, tente fechar os dataset´s e abrir novamente antes de puxar o relatório.
Sim, os datasets estão sempre abertos. Acontece da forma que você descreveu.
O correto seria então SEMPRE fechar o dataset quando desejo ter os registros atualizados? Esta solução pareceria meio arcaica, concorda?
Eu fiquei perdido na questão porque:
Eu dou uma entrada/saída no caixa. (logo abaixo tem um DBEdit ligado em uma view da tabela SALDO mostrando o saldo do caixa)
Depois de executar o post, uma trigger, no after insert e no after update, vai na tabela SALDO e recalcula o saldo do caixa, então ocorre o ApplyUpdates(0) e nenhum erro é retornado pelo firebird...
Executo o dataset.Refresh(); na tabela SALDO.
O valor, correspondente ao saldo do caixa, não é atualizado no DBEdit.
Vou no IBExperte e virifico o valor que está gravado no campo. Está correto e atualizado.
Volto ao aplicativo e clico em um outro botão que contém a instrução dataset.Refresh(); e o valor do DBEdit é atualizado
Talvez eu não tenha me espressado corretamente no post anterior, mas a minha dúvida é: Porque o dataset não foi atualizado automáticamente após o ApplyUpdates(0)?
Agradeço por qualquer ajuda.
Sucesso à todos!
GOSTEI 0
José
14/06/2011
Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0