Fórum Banco de dados não atualiza em tempo real #207880

20/01/2004

0

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

Meni.momm

Responder

Posts

20/01/2004

Tuca@ctgeo.com.br

Eu tive o mesmo problema, mas estava utilizado o access com o ADO

eu utilizei o método .requery do Recordset

Luiz Fernando


Responder

Gostei + 0

20/01/2004

Weber

Colega, provavelmente você está utilizando Commit e Rollback, substitua por CommitRetaining e RollbackRetaining


Responder

Gostei + 0

20/01/2004

Vinicius2k

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...


Responder

Gostei + 0

20/01/2004

Meni.momm

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?


Responder

Gostei + 0

20/01/2004

Meni.momm

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!


Responder

Gostei + 0

20/01/2004

Vinicius2k

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...


Responder

Gostei + 0

20/01/2004

Meni.momm

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


Responder

Gostei + 0

20/01/2004

Weber

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.


Responder

Gostei + 0

20/01/2004

Weber

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]


Responder

Gostei + 0

20/01/2004

Meni.momm

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:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar