DeadLock - Baixa de Estoque

Delphi

13/12/2012

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
Codigostr

Codigostr

Curtidas 0

Respostas

André Celestino

André Celestino

13/12/2012

Olá, codigostr.
Você poderia postar o código no qual você faz a transação?
GOSTEI 0
Codigostr

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
POSTAR