Fórum Gravação Simultânea em Rede - DBExpress #224914

08/04/2004

0

Utilizo DBExpress e Firebird 1.0 - Delphi 7.
A rotina no meu programa: logo após gravar uma venda, edito a tabela de produtos e faço: ClientDataSetProdutos.Edit; ClientDataSetProdutosSaldo.Value := ClientDataSetProdutosSaldo.Value - ClientDataSetVendaItensQtde.Value; ClientDataSetProdutos.ApplyUpdates(-1). Enquanto estou trabalhando em apenas uma máquina, beleza. Meu problema acontece quando vou gravar duas vendas simultâneas e com o mesmo produto - uma em cada máquina na rede. Os lançamentos da venda gravam, mas o campo saldo do cadastro de produtos só é diminuído uma vez, ou seja, o estoque baixa apenas na quantidade digitada em uma das vendas. Parece que o sistema tenta gravar, percebe que a tabela está em modeo edit e daí não faz nada. Também não dá nenhum erro. Alguém poderia me ajudar com uma luz? Obrigadíssimo.


Valdirdill

Valdirdill

Responder

Posts

08/04/2004

Everton

Colega,

acho que seria mais conveniente você atualizar o estoque após cada venda de item. Ou seja, no before post da tabela de VendaItens, você verifica se há disponibilidade do produto e dá baixa no estoque. Assim, independente da quantidade de vendas simultâneas daquele produto, você terá o seu estoque sempre atualizado.


Espero ter ajudado.


Responder

Gostei + 0

09/04/2004

Valdirdill

Obrigado pela resposta, mas como eu faria isso pois no Before Post, pois em vez de venda, poderia ser uma compra. Aí em vez de diminuir, teria que aumentar. Como ficaria?
Obrigado.



Colega, acho que seria mais conveniente você atualizar o estoque após cada venda de item. Ou seja, no before post da tabela de VendaItens, você verifica se há disponibilidade do produto e dá baixa no estoque. Assim, independente da quantidade de vendas simultâneas daquele produto, você terá o seu estoque sempre atualizado. Espero ter ajudado.



Responder

Gostei + 0

09/04/2004

Logado

Utilize uma triggrer para resolver isso, assim vc terá o controle disso direto no banco de dados com mais rapidez e confiabilidade, já que o evento before post ocorre localmente, com a triggrer vc estará tratando diretamente com a entrada de dados no banco.

Outra dica eh usar o método ApplayUpdates com o parametro 0 assim
ApplayUpdates(0), assim a gravação será feita sem aceitar nenhum tipo de erro que possa ocorrer, com -1 o método aceita a gravação com qualquer tipo de erro, o que pode acarretar problemas mais tarde.

Espero q tenha ajudado...


Responder

Gostei + 0

09/04/2004

Valdirdill

Não trabalho muito com trigger. Será que você poderia me ajudar a fazê-la?


Utilize uma triggrer para resolver isso, assim vc terá o controle disso direto no banco de dados com mais rapidez e confiabilidade, já que o evento before post ocorre localmente, com a triggrer vc estará tratando diretamente com a entrada de dados no banco. Outra dica eh usar o método ApplayUpdates com o parametro 0 assim ApplayUpdates(0), assim a gravação será feita sem aceitar nenhum tipo de erro que possa ocorrer, com -1 o método aceita a gravação com qualquer tipo de erro, o que pode acarretar problemas mais tarde. Espero q tenha ajudado...



Responder

Gostei + 0

09/04/2004

Logado

claro com prazer utilize o ibexpert q já vai lhe facilitar a vida....
so tu postar ae o q vc quer com os campos e tabelas... posso até te mandar um email com um gdbzinho como exemplo


Responder

Gostei + 0

10/04/2004

Valdirdill

Por favor envie: valdiresolange@bol.com.br

claro com prazer utilize o ibexpert q já vai lhe facilitar a vida.... so tu postar ae o q vc quer com os campos e tabelas... posso até te mandar um email com um gdbzinho como exemplo



Responder

Gostei + 0

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

Aceitar