DeadLock - Baixa de Estoque
Estou com o seguinte problema. Tenho uma tela de vendas onde são inseridos os itens da mesma para baixa de estoque. O estoque eu baixo através de triggers no banco de dados (Firebird 2.5). A cada item inserido estou dando um CommitRetaining(IBX). O problema é que se eu abrir mais de uma instancia do programa e tentar inserir o mesmo item nas outras instâncias ao mesmo tempo (Incluir/Alterar/Exluir) ocorre o erro de DeadLock devido a trigger.
Eu já tentei alterar de CommitRetaining para Commit, mas mesmo assim ocorre o erro. O estoque é atualizado normalmente, porém mesmo dando o commit parece que o FB não libera a transação e a mesma continua pendente.
Alguém sabe de uma solução para este caso, ou quem sabe uma forma de eu monitorar a abertura e fechamento das transações do FB para verificar se estão realmente ficando abertas?
Estou usando:
Delphi 2010
IBX
Firebird 2.5
Windows 7 64 bits - Ultimate
Eu já tentei alterar de CommitRetaining para Commit, mas mesmo assim ocorre o erro. O estoque é atualizado normalmente, porém mesmo dando o commit parece que o FB não libera a transação e a mesma continua pendente.
Alguém sabe de uma solução para este caso, ou quem sabe uma forma de eu monitorar a abertura e fechamento das transações do FB para verificar se estão realmente ficando abertas?
Estou usando:
Delphi 2010
IBX
Firebird 2.5
Windows 7 64 bits - Ultimate
Codigostr
Curtidas 0
Respostas
André Celestino
13/12/2012
Olá, codigostr.
Você poderia postar o código no qual você faz a transação?
Você poderia postar o código no qual você faz a transação?
GOSTEI 0
Codigostr
13/12/2012
Eis aí parte do código, onde eu dou o CommitRetaining na transação. Eu já tentei dar um commit, fechar e abrir novamente a tabela, porém ocorre o mesmo erro.
[...]
Try
tblItens.Post;
if bNovoRegistro then
IBtrans.CommitRetaining;
Except
On E: Exception do
begin
ExibirMsg('Erro ao inserir produto!' + #13 + E.Message);
end;
End;
[...]
GOSTEI 0