Fórum Duvidas sobre transação - Qual dessas opções é melhor #47795
28/10/2004
0
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?
[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
Curtir tópico
+ 0
Responder
Posts
29/10/2004
Fsflorencio
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.
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.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)