Refresh Firedac
07/08/2019
0
Estamos migrando nossas aplicações de dbexpress para Firedac com Firebird 3.0.
Estou com um problema relacionado a atualização dos dados(refresh ou update).
Tenho uma tela de lote(FrmLote) onde posso incluir varias solicitações em um lote.
Nessa tela de lote possuo um Cds com os dados dos lotes e outro ligado a ele com as solicitações.
Quando abro a tela de lote(FrmLote) faço uma busca, os dados são carregados corretamente.
Nessa mesma tela possuo um botão "importar" que chama uma outra tela(FrmSolicitacoesImporta) com as solicitações disponíveis.
A tela FrmSolicitacoesImporta possui um cds com as solicitações, eu marco as solicitações que desejo importar e preencho no cds o codigo do lote
faço o post, applyUpdates e fecho a tela FrmSolicitacoesImporta.
Nesse momento verifico a informação no banco e o código do lote foi corretamente gravado nas solicitações.
Ao voltar a tela FrmLote sem fechar a mesma desde o inicio da operação, eu faço um refresh no Cds de lotes e as solicitações não são atualizadas.
Se eu fechar a tela FrmLote e abrir novamente os dados passam a sem exibidos.
Já inseri um TFDTransaction no meu TFDConnection.
UpdateOptions esta marcado AutoCommitUpdates
RefreshMode rmAll
Na tela TFDQuery(SqlCadastro), TDataSetProvider(DspCadastro), ClientDataSet(Cdscadastro) e DataSource(DsCadastro) do lote,
DataSource(DsMaster) ligado ao Sqlcadastro
TFDQuery(SqlSolicitacoes), TDataSetProvider(DspSolicitacoes), ClientDataSet(CdsSolicitacoes) e DataSource(DsSolicitacoes) de solicitações.
Reitero que a busca aparentemente funciona, o problema ocorre somente quando em outra tela faço alguma atualização e chamo o refresh que não atualiza p CdsSolicitacoes.
Smart Sistemas
Posts
09/08/2019
Fabricio Kawata
"The Refresh method does not work for all TDataSet descendants. In particular, TQuery....".
Nestes casos, onde é usado o trio de componentes Query + Provider + ClientDataSet, o recomendado segundo a própria documentação é abrir e fechar o DataSet. Aí é testar e ver se adapta ao seu caso.
Espero ter ajudado de alguma forma.
Forte abraço!
12/08/2019
Smart Sistemas
"The Refresh method does not work for all TDataSet descendants. In particular, TQuery....".
Nestes casos, onde é usado o trio de componentes Query + Provider + ClientDataSet, o recomendado segundo a própria documentação é abrir e fechar o DataSet. Aí é testar e ver se adapta ao seu caso.
Espero ter ajudado de alguma forma.
Forte abraço!
Obrigado Fabricio.
Achei o problema e sua colocação esta correta.
Antes eu usava DataSet, Provider e ClientDataSet e ao converter fiquei com TFDQuery e ClientDataSet.
A solução é fazer o refresh no "Sqlfilho", ou seja, para minha situação foi
SqlSolicitacao.Refresh; CdsCadastro.Refresh;
05/09/2019
Mauro Klowaski
É como se carregasse pra memoria da primeira vez e trabalhasse com esses dados em memoria mesmo com CachedUpdates = False
Clique aqui para fazer login e interagir na Comunidade :)