Gravação Simultânea em Rede - DBExpress
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.
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
Curtidas 0
Respostas
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.
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
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.
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
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...
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
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
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
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
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