ClientDataSet em Rede

Firebird

25/08/2004

Olá Pessoal, Estou com um pequeno problema com o IBClientDataSet:

eu tenho um modulo em um sistema em rede para dar entrada de estoque, tenho uma tabela que armazena o cabeçalho e outra p/ itens que estão ligadas em 2 IBClientDataSet(em master/detail) quando + de 1 usuário da entrada nessas tabelas ao mesmo tempo e em produtos diferentes ocorre tudo bem, mas quando é dada entrada em produtos iguais ele salva o cabeçalho dos dois usuarios, mas só salva os itens do primeiro usuário que salvou, os itens do outro usuario ele não salva e não salvando os itens ele não dá entrada na tabela de estoque geral que é alimentada por um trigger que e´ executado no evento after insert da tabela de itens da nota fiscal.
alguém já teve o mesmo problema ou tem uma solução?


obrigado.


Tap_pedroso

Tap_pedroso

Curtidas 0

Respostas

Afarias

Afarias

25/08/2004

|Olá Pessoal, Estou com um pequeno problema com o IBClientDataSet:

Este componente foi descontinuado



|alguém já teve o mesmo problema ou tem uma solução?

Acredito q o problema é:: Quando o 1o usuário entra o ITEM a triger atualiza o ESTOQUE do produto deixando assim o registro bloqueado

Quando o segundo usuário cadastra a entrada do mesmo produto, a trigger tenta atualizar o estoque mas não pode pq o registro está bloqueado rertornando um erro (que vc não está vendo pq ClientDataSets não geram exceptions!)


MINHA SUGESTÃO:

1- configure sua transação para WAIT (neste processo)
2- mantenha as transações curtas (em geral não tem q se preocupar com isso pois transações usando CDSs normalmente são muito rápidas -- mas verifique seu código)


T+


GOSTEI 0
Tap_pedroso

Tap_pedroso

25/08/2004

obrigado pela ajuda afarias mais eu não configurei nada no ibtransaction eu tenho que confirurar esse WAIT no TRANSACTION EDITOR do ibtransaction?


GOSTEI 0
Tap_pedroso

Tap_pedroso

25/08/2004

agora parece que deu certo [b:6eec8cd51d]afarias[/b:6eec8cd51d] eu coloquei o seguinte código no botão salvar e mudei o transaction editor para [b:6eec8cd51d]read commited[/b:6eec8cd51d] porque ele estava sem nenhuma opcao selecionada.

[b:6eec8cd51d]try
dm.IBMOVESTOQUE.ApplyUpdates(0);
dm.IBITESTOQUE.ApplyUpdates(0);
DM.IBTransaction.Commit;
except
messagedlg(´Atenção: Existe outro usuário na rede tentando alterar o mesmo ´+
´produto que você, tente salvar novamente´,mtconfirmation,[mbok],0);
dm.IBTransaction.Rollback;
exit;
end;
messagedlg(´Dados da Entrada de Estoque Foram Salvos com Sucesso...´,mtconfirmation,[mbok],0); [/b:6eec8cd51d]


obrigado pela força.


GOSTEI 0
POSTAR