Ir para conteúdo
Fórum Script Brasil
  • 0

Transação concorrente - Deadlock


Murilo Sousa

Pergunta

Boa tarde!

Eu possuo um sistema feito em Delphi 7 + Firebird 2.5 com componentes de conexão da paleta InterBase. 
Em uma das minhas rotinas, é realizada a baixa de estoque do produto através de Expedição de pedido de venda.
Estou com o seguinte problema: Ao fazer a expedição de um mesmo produto, simultaneamente, em terminais diferentes (e pedidos de venda diferentes), o sistema trava e logo após destravar exibe a seguinte mensagem de erro: "deadlock / concurrent transaction number is 14297". Segue o código:

IBTransAtualizacao.StartTransaction;
try
  ExpedirItem(StrToInt(edtCodigo.Text)
             ,poItemExpedido.nQuantidade
             ,poItemExpedido.nQuantidadeUP
             ,cdsItensVendaITE_QTD_EXPEDIDO.AsFloat
             ,cdsItensVendaITE_QTD_UP_EXPEDIDO.AsFloat
             );
  IBTransAtualizacao.Commit;
except
  on E: Exception do
  begin
    IBTransAtualizacao.Rollback;
    MensagemFalha('Expedição não executada!');
  end;
end;

Toda operação está ligada no mesmo Transaction (IBTransAtualizacao).
Dentro do método ExpedirItem, faço algumas consultas na tabela ANDAMENTO_ESTOQUE (Esta por sua vez armazena toda movimentação de estoque do sistema por produto) para poder recalcular o saldo do produto que está sendo expedido e assim poder dar baixa do mesmo no estoque (Atualizar o campo PRO_ESTOQUE da tabela PRODUTO).
O deadlock provavelmente ocorre porque ao consultar simultaneamente a tabela ANDAMENTO_ESTOQUE cruzando (JOIN) com a tabela PRODUTO, o firebird bloqueia o registro referente ao produto que está sendo expedido. Mas está tudo ligado na mesma transação. Alguém sabe como resolver o problema do deadlock? Como faço para trabalhar com "fila"? Ex: Caso a transação em um terminal tente acessar um registro que já está sendo utilizado por outro, o sistema aguarde até o registro ser "liberado"? A propriedade Params do IBTransAtualizacao está como:

read_committed
no_rec_version
wait

Obrigado desde já!

Editado por Murilo Sousa
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...