Duvidas sobre transação - Qual dessas opções é melhor

Firebird

28/10/2004

Tenho uma Transação para lançar as vendas. E no Final da Venda quando ela é confirmada é chamada a transação [b:d998d45c7b]TransBaixa[/b:d998d45c7b] para realizar a baixa dos produtos.

[b:d998d45c7b]Modo 01[/b:d998d45c7b]
1) Inicio a transação
2) faço um loop para ver todos os itens lançados
3) Baixo um item por vez
4) Se acontecer DeadLock dou um [b:d998d45c7b]RollBack[/b:d998d45c7b]
5) Se todos os itens forem baixados corretamente dou um [b:d998d45c7b]Commit[/b:d998d45c7b]

Até fica rapido o problema é que se der um DeadLock, o cliente tem que clicar no botão sair novamente para ele tentar Sair e tentar baixar novamente, caso o cliente que esteja com o produto em edição tenha liberado-o.

----------------------------------------------------------------------
IDEIA 2
E se eu fizesse o modo acima assim. Em vez de abrir a Transação no inicio do While eu faça:
1) Abro a transação
2) Baixo o Produto
3) se der deadlock dou [b:d998d45c7b]RollBack[/b:d998d45c7b]
4) senão dou um Commit [i:d998d45c7b]Liberando assim este item para que não ocorra erro em outras maquinas[/i:d998d45c7b]
5) ai vou para o proximo item e abro a transação novamente.

A vantagem desta forma é que vai ser mais dificil ocorrer DeadLock do que a primeira.... Pois estou pensando no caso de um supermercado que varios caixas estão lançando varios produtos e podem fechar a venda no mesmo tempo. E pode acontecer muitas vezes deles estarem vendendo o mesmo produto..

[b:d998d45c7b]Então. Abrir e Fechar um transação a cada item fica lento..?
Se for uma venda de 50 itens vou abrir e fechar a transação 50 vezes[/b:d998d45c7b]

O que vcs acham melhor..
Possuem alguma idéia melhor?


Sistemp

Sistemp

Curtidas 0

Respostas

Fsflorencio

Fsflorencio

28/10/2004

Amigo, vou te dizer como costumo fazer.

Procuro usar transações curtas, ou seja, insiro os registros e executo outras queryes de baixa tudo de uma vez e dando um commit apenas no final. Tudo em um único botão. Todas as queryes estariam ligadas na mesma transação.

A desvantagem é que não posso usar dbedits e dbgrids para fazer as telas de cadastro. Devo armazenar em edits comuns e stringgrids fazendo ficar um pouco mais demorado no desenvolvimento.

Se vc está ´preso´ nestes controles, então sugiro usar uma transação apenas para a as queryes da baixa e dos ítens, assim você não corre o risco de dar um lock entre as duas transações, mas ainda pode acontecer este problema entre duas instâncias do seu sistema.

Espero ter ajudado.


GOSTEI 0
POSTAR