Interbase com mais de um usuário em rede:
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
Grato
Cfreitas
Curtidas 0
Respostas
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
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+
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
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.
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
19/03/2004
Ao dar commit, todos os datasets associados com aquela transação fecham, é por isso, que os registros somem.
GOSTEI 0
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+
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
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.
Grato.
GOSTEI 0
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