ClientDataSet em Rede
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.
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
Curtidas 0
Respostas
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+
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
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
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.
[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