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...
Casa

Casa

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?
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar