Banco de dados não atualiza em tempo real
Olá Pessoal, gostaria de saber porque quando eu gravo um registro em uma maquina da rede, este registro não aparce nas outras maquinas da rede sem que eu feche o meu aplicativo e abra novamente? Eu estou usando o interbase 6.0.
Meni.momm
Curtidas 0
Respostas
Tuca@ctgeo.com.br
20/01/2004
Eu tive o mesmo problema, mas estava utilizado o access com o ADO
eu utilizei o método .requery do Recordset
Luiz Fernando
eu utilizei o método .requery do Recordset
Luiz Fernando
GOSTEI 0
Weber
20/01/2004
Colega, provavelmente você está utilizando Commit e Rollback, substitua por CommitRetaining e RollbackRetaining
GOSTEI 0
Vinicius2k
20/01/2004
colega,
uma vez efetuada uma query com select os registros que ela contém não sofrem alteração motivada de forma externa, ou seja, a máquina X não consegue fazer com que a máquina Y re-execute a query...
o tempo real não existe, a forma mais trivial de contornar isso, é abrir a query ao abrir o form e fechá-la, quando fechar o form... é bastante comum, também um botão ´Atualizar´ que feche e abra a query, mas vale o cuidado : dependendo do tamanho da tabela e do desempenho da rede e da máquina... o botão ´Atualizar´ pode não ser uma boa prática...
espero ter ajudado...
uma vez efetuada uma query com select os registros que ela contém não sofrem alteração motivada de forma externa, ou seja, a máquina X não consegue fazer com que a máquina Y re-execute a query...
o tempo real não existe, a forma mais trivial de contornar isso, é abrir a query ao abrir o form e fechá-la, quando fechar o form... é bastante comum, também um botão ´Atualizar´ que feche e abra a query, mas vale o cuidado : dependendo do tamanho da tabela e do desempenho da rede e da máquina... o botão ´Atualizar´ pode não ser uma boa prática...
espero ter ajudado...
GOSTEI 0
Meni.momm
20/01/2004
Colega, provavelmente você está utilizando Commit e Rollback, substitua por CommitRetaining e RollbackRetaining
Olá Colega, estou realmente usando o Commit e o Rollback, vc pode me explicar qual a diferença entre eles para o CommitRetaining e ollbackRetaining?
GOSTEI 0
Meni.momm
20/01/2004
colega,
uma vez efetuada uma query com select os registros que ela contém não sofrem alteração motivada de forma externa, ou seja, a máquina X não consegue fazer com que a máquina Y re-execute a query...
o tempo real não existe, a forma mais trivial de contornar isso, é abrir a query ao abrir o form e fechá-la, quando fechar o form... é bastante comum, também um botão ´Atualizar´ que feche e abra a query, mas vale o cuidado : dependendo do tamanho da tabela e do desempenho da rede e da máquina... o botão ´Atualizar´ pode não ser uma boa prática...
espero ter ajudado...
Colega, o proceso que você explica assima eu entendo, mas só que mesmo eu reiniciando a query os registro não aparecem até que eu feche o sistema, este processo que você descreve acima funciona corretamente se usado o database ou o bde mas diretamente no interbase não estou conseguindo. Obrigado pela atenção, Abraço!
GOSTEI 0
Vinicius2k
20/01/2004
entendo... acabei sendo óbvio demais né?
realmente seu problema deve ser relacionado ao commit das queryes... neste caso siga as instruções do colega weber...
realmente seu problema deve ser relacionado ao commit das queryes... neste caso siga as instruções do colega weber...
GOSTEI 0
Meni.momm
20/01/2004
entendo... acabei sendo óbvio demais né?
realmente seu problema deve ser relacionado ao commit das queryes... neste caso siga as instruções do colega weber...
Valeu! :D
GOSTEI 0
Weber
20/01/2004
Eu não sei explicar exatamente a diferença entre um e outro.
O que sei é que
CommitRetaining = Efetua o commit, fecha somente a transação da estação e atualiza os dados.
Commit = Efetua o commit, fecha todas as transações e não atualiza os dados.
Veja um exemplo de como eu utilizo nos meus sistemas
--------------------------------------------------------------------
try
if not DM.Transaction.InTransaction then
DM.Transaction.StartTransaction;
DM.QRExec.SQL.Clear;
DM.QRExec.SQL.Add(´Insert into ......
DM.QRExec.ExecSQL;
DM.Transaction.CommitRetaining;
MessageBox(handle,´Operação concluida´,´Aviso´,mb_OK+mb_ICONINFORMATION);
end;
except
on E:Exception do
begin
DM.Transaction.RollbackRetaining;
MensagemErro(E,´´);
end;
end;
-----------------------------------------------------------------------
DM = Meu formulário DataModule
Transation = Componente IBTransacion
QRExec = Componente IBQuery
Trabalho dessa forma a mais de dois anos e nunca tive problemas, tenho sistema rodando em 12 estações ao mesmo tempo.
Tenho sistema onde quatro estações utilizam a mesma tela simultaneamente.
O que sei é que
CommitRetaining = Efetua o commit, fecha somente a transação da estação e atualiza os dados.
Commit = Efetua o commit, fecha todas as transações e não atualiza os dados.
Veja um exemplo de como eu utilizo nos meus sistemas
--------------------------------------------------------------------
try
if not DM.Transaction.InTransaction then
DM.Transaction.StartTransaction;
DM.QRExec.SQL.Clear;
DM.QRExec.SQL.Add(´Insert into ......
DM.QRExec.ExecSQL;
DM.Transaction.CommitRetaining;
MessageBox(handle,´Operação concluida´,´Aviso´,mb_OK+mb_ICONINFORMATION);
end;
except
on E:Exception do
begin
DM.Transaction.RollbackRetaining;
MensagemErro(E,´´);
end;
end;
-----------------------------------------------------------------------
DM = Meu formulário DataModule
Transation = Componente IBTransacion
QRExec = Componente IBQuery
Trabalho dessa forma a mais de dois anos e nunca tive problemas, tenho sistema rodando em 12 estações ao mesmo tempo.
Tenho sistema onde quatro estações utilizam a mesma tela simultaneamente.
GOSTEI 0
Weber
20/01/2004
Esqueci, onde você vê
MensagemErro é uma função que mostra um ShowMessage com o SQL da Query mais a mensagem de erro retornada pelo banco.[/b]
MensagemErro é uma função que mostra um ShowMessage com o SQL da Query mais a mensagem de erro retornada pelo banco.[/b]
GOSTEI 0
Meni.momm
20/01/2004
Eu não sei explicar exatamente a diferença entre um e outro.
O que sei é que
CommitRetaining = Efetua o commit, fecha somente a transação da estação e atualiza os dados.
Commit = Efetua o commit, fecha todas as transações e não atualiza os dados.
Veja um exemplo de como eu utilizo nos meus sistemas
--------------------------------------------------------------------
try
if not DM.Transaction.InTransaction then
DM.Transaction.StartTransaction;
DM.QRExec.SQL.Clear;
DM.QRExec.SQL.Add(´Insert into ......
DM.QRExec.ExecSQL;
DM.Transaction.CommitRetaining;
MessageBox(handle,´Operação concluida´,´Aviso´,mb_OK+mb_ICONINFORMATION);
end;
except
on E:Exception do
begin
DM.Transaction.RollbackRetaining;
MensagemErro(E,´´);
end;
end;
-----------------------------------------------------------------------
DM = Meu formulário DataModule
Transation = Componente IBTransacion
QRExec = Componente IBQuery
Trabalho dessa forma a mais de dois anos e nunca tive problemas, tenho sistema rodando em 12 estações ao mesmo tempo.
Tenho sistema onde quatro estações utilizam a mesma tela simultaneamente.
CARA! VC CAIU DO CEU! Um abraço! :lol:
GOSTEI 0