Gravação Simultânea em Rede - DBExpress

Delphi

08/04/2004

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

Curtidas 0

Respostas

Everton

Everton

08/04/2004

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.


GOSTEI 0
Valdirdill

Valdirdill

08/04/2004

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.



GOSTEI 0
Logado

Logado

08/04/2004

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


GOSTEI 0
Valdirdill

Valdirdill

08/04/2004

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



GOSTEI 0
Logado

Logado

08/04/2004

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


GOSTEI 0
Valdirdill

Valdirdill

08/04/2004

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



GOSTEI 0
POSTAR