Delphi + Firedac+ Mysql + Transações Isoladas
06/06/2017
0
Bom dia pessoal estou com um problema e não sei como resolver.
Estou desenvolvendo um sistema, que envolve controle de estoque.
Quando dois usuários iniciam uma baixa simultânea de um produto onde existe apenas uma unidade disponivel em estoque sistema o estoque esta ficando negativo.
Por que?
Por que quando os dois usuários iniciaram a transação a quantidade disponível em estoque era 1, porem quando um deles baixa o estoque obviamente o estoque vai zerar, e como o outro usuário já havia iniciado a transação ele não reconhece o novo valor do estoque que é Zero.
Como contornar esse problema?
Eu particularmente iniciaria outra transação independente para verificar o estoque antes da baixa, o problema é q eu não consigo fazer o sistema iniciar outra transação independente / isolada da outra.
Isso é um problema do componente Firedac ou é um comportamento padrão do Mysql?
Alguem tem uma solução? se fosse problema do Componente firedac gostaria de uma solução nativa do Delphi, não gosto de usar componentes de terceiros...
Estou desenvolvendo um sistema, que envolve controle de estoque.
Quando dois usuários iniciam uma baixa simultânea de um produto onde existe apenas uma unidade disponivel em estoque sistema o estoque esta ficando negativo.
Por que?
Por que quando os dois usuários iniciaram a transação a quantidade disponível em estoque era 1, porem quando um deles baixa o estoque obviamente o estoque vai zerar, e como o outro usuário já havia iniciado a transação ele não reconhece o novo valor do estoque que é Zero.
Como contornar esse problema?
Eu particularmente iniciaria outra transação independente para verificar o estoque antes da baixa, o problema é q eu não consigo fazer o sistema iniciar outra transação independente / isolada da outra.
Isso é um problema do componente Firedac ou é um comportamento padrão do Mysql?
Alguem tem uma solução? se fosse problema do Componente firedac gostaria de uma solução nativa do Delphi, não gosto de usar componentes de terceiros...
Casa
Curtir tópico
+ 0
Responder
Posts
07/06/2017
Gutierry Pereira
Você pode criar quantas transações desejar utilizando a classe TFDTransaction, para cada query que desejar aponte a propriedade transaction para a transação desejada.
Responder
07/06/2017
Casa
Aponto para propriedade de qual componente? O de conexão ?
Com o firedac eu até consigo startar outra transação usando o componente de conexão....ele nao da erro....mas simplesmente não faz diferença se eu startar ela novamente, ela vai compartilhar a mesma transação dos outros, tanto q o commit e/ rollback da segunda transação nao tem efeito...até eu comitar a primeira.
Poderia me dar um exemplo?
Com o firedac eu até consigo startar outra transação usando o componente de conexão....ele nao da erro....mas simplesmente não faz diferença se eu startar ela novamente, ela vai compartilhar a mesma transação dos outros, tanto q o commit e/ rollback da segunda transação nao tem efeito...até eu comitar a primeira.
Poderia me dar um exemplo?
Responder
Clique aqui para fazer login e interagir na Comunidade :)