Deadlock em update na trigger

Delphi

28/08/2008

Tenho um software de venda, quando faço venda de um PRODUTO atualizo automaticamente a tabela de estoque.
Gostaria de fazer esta atualização utilizando uma TRIGGER na tabela de ITENSDEVENDA para fazer a atualização do estoque.

Bom tudo ia bem até descobrir que quando trabalho com dois terminais fazendo a venda do mesmo PRODUTO ao mesmo tempo a execução da TRIGGER ocasiona DEADLOCK porque ela tenta atualizar a tabela de estoque alterando a o saldo do mesmo produto ao mesmo tempo.
Ex.:
Micro1 Micro2
Insere venda de item Insere venda de item
Venda Número 33 Venda Número 34
Produto Número 4 Produto Número 4
IBTransaction.Commit IBTransaction.Commit
Tabela de itens de Venda Executa a TRIGGER

CREATE TRIGGER ´INS_ITEM´ FOR ´ITEM´
ACTIVE BEFORE INSERT POSITION 0
as
begin
update estoque set estqtd = estqtd + new.iteqtd
where estproduto=new.iteproduto;
end

Conforme dito anteriormente, quando isso ocorre no mesmo instante ocorre DEADLOCK, quando existe um espaço de tempo entre as inserções não ocorre.

Por falta de conhecimento gostaria de saber qual é o meio correto de se fazer isso utilizando TRIGGER.

OBS:
Estou trabalhando com Delphi 7 com FIRIBIRD
Estou utilizando os componetes da palheta INTERBASE.
Utilizo os componente:
IBDataBase,
IBTransaction
Dentro da minha aplicação, no final do INSERT do item estou executando IBTransaction.Commit.
Mesmo assim ocorre a exceção DEADLOCK quando executamos a inserção do mesmo item ao mesmo tempo.


Erasmocc

Erasmocc

Curtidas 0
POSTAR