Fórum Firebird Refresh #353862
15/02/2008
0
Estou com a seguinte duvida abaixo descrita e gostaria da ajuda dos colegas.
Duvida
1) Tenho um sistema rodando em Delphi 7, Firebird 2.0 e conexão com DBExpress:
SQLConnection;
ClientDataSet;
SQLDataSet;
DataSetProvider;
DataSource.
No caso concreto, existem 10 máquinas acessando o banco de dados ao mesmo tempo. Todas conseguem visualizar, Incluir, Alterar e Excluir dados, porém, as Inclusões, Alterações e Exclusões que qualquer máquina faça só vai ser vista pela outra quando o usuário fechar o sistema e abri-lo novamente. Não está correto! Como eu faço para que as Inclusões, alterações e Exclusões que qualquer terminal faça seja refletido automaticamente para os demais? Sou inicante neste componente, antes usava BDE com Paradox. Como devo fazer agora para atualizar as informações em ambiente Cliente-Servidor.
Desde já agradeço a ajuda e atenção.
M
Curtir tópico
+ 0Posts
15/02/2008
Edsoncabral
Observe que o seu ClientDataSet, que é quem exibe seus registros, faz um cache dos registros resultantes do seu select, e não são atualizados automaticamente.
É realmente recomendado que passe a utilizar selects parametrizáveis (com o uso do where nos seus selects) para evitar ´fetch all´ pelos seus clientdatasets, o que tornaria o trabalho num sistema com milhares de registros inviável.
Na dúvida, poste.
Gostei + 0
16/02/2008
M
Valeu pela dica, foi de grande valia.
Ainda me resta uma duvida:
[b:d3e5647b3d]1) Em que momento devo abrir e fechar o ClientDataSet?[/b:d3e5647b3d]
Obs: Onde devo colocar a rotina que deve abrir e fechar o ClientDataSet?
alternativas:
a) Após a rotina de Inclusão, Alteração e Exclusão;
b) No onShow do formulario de cadstro onde tem a rotina de Inclusão, Alteração e Exclusão;
c) Ao sair do Form de cadastro onde tem a rotina de Inclusão, Alteração e Exclusão;
d) Em todas as alternativas acima.
Desde já grato pela atenção.
Gostei + 0
16/02/2008
Catunda
Inclua a linha abaixo nos eventos AfterPost e AfterDelete do ClientDataSet:
ClientDataSet1.ApplyUpdates(0);
Isso faz com que os dados em momória sejam descarregados e gravados fisicamente no banco de dados; em outras palavras, comitado.
Dessa forma se algum outro usuário acessar o registro que vc acabou de alterar, já verá suas alterações.
Vale a pena lembrar que, se esse registro já estiver sendo visualizado por outro usuário no momento em que vc alterou, ele não verá de imediato, ele terá de dar um refresh no ClientDataSet ou abrir e fechar novamente o ClientDataSet, pq o ClientDataSet mostra os dados da forma em que estavam qdo foi aberto, ele não está diretamente ligado ao banco de dados.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)