Interbase com mais de um usuário em rede:

Firebird

19/03/2004

Comecei a testar meu programa com banco Interbase em rede, e quando abro mais de uma estação com meu programa dá sempre a mensagem de erro´Lock conflict on no wait transaction deadlock´. Minhas buscas e inserções de dados nas tabelas, até onde testei, funcionam normalmente. Gostaria de saber o que é essa mensagem?
Grato


Cfreitas

Cfreitas

Curtidas 0

Respostas

Sremulador

Sremulador

19/03/2004

Amigo isto acontece quando o mesmo usuário tenta utilizar o mesmo resgistro que o seu atualmente, para isso você tem que fazer um tratamento para as trasações, try except...


GOSTEI 0
Afarias

Afarias

19/03/2004

Vc deve *também* cuidar bem de suas transações, e quando fizer uma alteração procurar fazer com q a transação q contenha estas alterações seja o mais curta possível.

Quando vc edita um registro e posta! (ou seja, executa um UPDATE em 1 registro) este registro fica bloqueado (em LOCK) para alterações por outros usuários... e só será liberado, quando a transação for ´commitada´ ou descartada (rollback)


T+


GOSTEI 0
Cfreitas

Cfreitas

19/03/2004

Tudo bem, eu faço um commit após cada post Ex:
IBDataSet1.Edit;
...
IBDataSet1.Post;
IBDataSet1.Transaction.commit;

Só que ocorre que meus DBGrids associados ao IBDataSet1 e outros DBGrids associados a outros IBDataSet´s na mesma rotina, somem todos os registros após o commit. Terei sempre que ficar mandando filtrar meus registros novamente?
Grato.


GOSTEI 0
Gandalf.nho

Gandalf.nho

19/03/2004

Ao dar commit, todos os datasets associados com aquela transação fecham, é por isso, que os registros somem.


GOSTEI 0
Afarias

Afarias

19/03/2004

Vc tem pelo menos 2 soluções::

1- usar transações diferentes para SELEÇÃO e EDIÇÃO
2- usar CommitRetaining no lugar de Commit (assim a transação não será realmente fechada e as Querys continuam abertas)


T+


GOSTEI 0
Cfreitas

Cfreitas

19/03/2004

Qual a diferença de usar IBDataSet.Transaction.commit..., ou utilizar um objeto IBTransaction.commit ligada ao meu IBDataBase, para confirmar as alterações em minhas tabelas? Gostaria de saber também, se quando utilizo uma SP para fazer select de registros, após esta seleção será necessário efetuar commit? Utilizo a SP em SelectSQL do IBDataSet

Grato.


GOSTEI 0
Afarias

Afarias

19/03/2004

Qual a diferença de usar IBDataSet.Transaction.commit..., ou utilizar um objeto IBTransaction.commit ligada ao meu IBDataBase,


Nenhuma!!


se quando utilizo uma SP para fazer select de registros, após esta seleção será necessário efetuar commit? Utilizo a SP em SelectSQL do IBDataSet


Não e Sim! Como vc está usando IBX (IBDataSet) vc *não* poderá efetuar o commit pois o DataSet será fechado. Entretanto, assim q sua aplicação não mais precisar dos dados, efetue o commit!


T+


GOSTEI 0
POSTAR