Atualização automática para todas as Conexões - Lazarus
Boa tarde, pessoal!
Programo em Lazarus e estou usando os componentes TIBConnection, TSQLTransaction, TSQLQuary, TDataSource e o FariBird e IBExpert
Tenho 2 terminais usando minha aplicação.
Quando um usuário clica em gravar registro, faço um applyupdate no banco.
Neste momento, tem como automáticamente atualizar o Banco no outro terminal, em que o usuário está com um dbgrid aberto, para ele ver que o registro acabou de ser cadastrado por outro terminal?
No AfterPost de cada TSQLQuary coloquei o seguinte código
Ex: Se o terminal 1 fez o cadastro e o mesmo estiver aberto, e se o terminal 2 com o mesmo form aberto que o terminal 1, só irá aparecer o que foi cadastrado pelo terminal 1 se o terminal 2 fechar o seu form e abri-lo novamente.
como resolver isso???
Abraço!
Programo em Lazarus e estou usando os componentes TIBConnection, TSQLTransaction, TSQLQuary, TDataSource e o FariBird e IBExpert
Tenho 2 terminais usando minha aplicação.
Quando um usuário clica em gravar registro, faço um applyupdate no banco.
Neste momento, tem como automáticamente atualizar o Banco no outro terminal, em que o usuário está com um dbgrid aberto, para ele ver que o registro acabou de ser cadastrado por outro terminal?
No AfterPost de cada TSQLQuary coloquei o seguinte código
tbCadMorador.ApplyUpdates;
Transacao.CommitRetaining;
TbCadMorador.Refresh;
dm.Conexao.Connected:=True;
dm.Transacao.Active:=True;
dm.tbCadMorador.Active:=True;
tbCadMorador.Close;
tbCadMorador.SQL.Clear;
tbCadMorador.SQL.Add('select * from CADMORADOR');
tbCadMorador.SQL.Add('where COD = (select max(COD) from CADMORADOR)');
tbCadMorador.Prepare;
tbCadMorador.Open;Ex: Se o terminal 1 fez o cadastro e o mesmo estiver aberto, e se o terminal 2 com o mesmo form aberto que o terminal 1, só irá aparecer o que foi cadastrado pelo terminal 1 se o terminal 2 fechar o seu form e abri-lo novamente.
como resolver isso???
Abraço!
Helton Garrido
Curtidas 0
Melhor post
Ermesom Lourenco
29/11/2017
Você está usando transação em dm.Transacao.Active:=True; porém não está comitando a mesma. Após todos os comandos faça dm.Transacao.Commit; ou algo do tipo que poderá visualizar a informação em todas as estações.
O problema pode ser entendido com ajuda deste artigo:
https://technet.microsoft.com/pt-br/library/ms190612(v=sql.105).aspx
Quando uma transação é aberta seus recursos não são liberados enquanto não se fecha a transação (com commit que é sucesso ou rowback que é o desfazimento de tudo).
Espero ter ajudado.
O problema pode ser entendido com ajuda deste artigo:
https://technet.microsoft.com/pt-br/library/ms190612(v=sql.105).aspx
Quando uma transação é aberta seus recursos não são liberados enquanto não se fecha a transação (com commit que é sucesso ou rowback que é o desfazimento de tudo).
Espero ter ajudado.
GOSTEI 2
Mais Respostas
Helton Garrido
29/11/2017
Meus caros, referente ao post acima, o que eu gostaria de fazer seria como neste vídeo
https://www.youtube.com/watch?v=XesIJOYDTd0
GOSTEI 0
Helton Garrido
29/11/2017
Obrigado meu caro Emersomi pela dica...
GOSTEI 0