Erro de transações concorrentes
05/08/2004
0
Não sei mais o que fazer, estou com um problema enorme no cadastro de vendas. Quando tem duas ou mais máquinas com a mesma tela aberta ao gravar dá o seguinte erro: ´COULDN´T PERFORM THE EDIT BECAUSE ANOTHER USER CHANGED THE RECORD.´
Está sendo muito problemático, dá dando este erro sem parar. Preceiso muito de ajuda.
:cry:
Abraços,
Fernanda.
Fernanda.sique
Posts
05/08/2004
Marcus.magalhaes
Vc pode usar transações para resolver seu problema. vc abre a transação, garantindo assim q só 1 usuário esteja no mesmo registro e depois q comitar o registro estará liberado. Porém vc deve fazer um controle para evitar q o usuário abra a janela e carregue um registro e vá almoçar, deixando o mesmo locado.
Como vc está montando seu processo?
Att,
05/08/2004
Fernanda.sique
Em todas as rotinas eu coloco StartTransaction e no final Commit.
Será que tem alguma configuração para fazer nos objetos?
05/08/2004
Marcus.magalhaes
infelizmente em linguagem de programação eu não posso te ajudar pq não sei, conheço mais banco de dados.
Att,
05/08/2004
Felipe_cduarte
Você está usando o delphi ??? se for eu posso até ajudar ... Uns dos motivos pode ser que dois usuarios estejam abrindo o mesmo registro do BD ... explique melhor q eu tento ajudar
05/08/2004
Fernanda.sique
Quando o usuário clica no botão incluir em dou um insert no banco e já imediatamente gravo, pronto a venda está gravada. Em seguida para o usuário continuar fazendo a venda eu dou um table.Edit e assim vai.
Na corpo da venda tem os itens que é insert em outra tabela. No final quando o usuário clicar no botão gravar a venda eu efetuo table.post e em segui executo um função que dá baixa no estoque e logo em seguida crio automaticamente uma ordem de serviço para entrega.
Estou usando o componente database, table, query da paleta BDE do delphi 7.
Vc sabe o que pode ser?
06/08/2004
Felipe_cduarte
Fica trankila, aos poucos a gente vai esclarecendo e chegamos lá ! Seguinte, pelo o que está aparecendo, na hora deste table.edit , dois usuários devem estar utilizam um mesmo produto por exemplo.. Se você der mais um pouco de detalhes fica mais facil de ver o porquê. Mas por outro lado acho que o que está teoricamente errado é o conceito... Você já experimentou utilizar stored procedures e o clientdataset ? Com o clientdataset voce poderá trazer as informações pra cada usuário , sem mexer fisicamente na tabela do BD ( evitando o comando edit ). E a SP você utilizaria no final de tudo , efetuando uma unica instrução de gravação .. Bom espero ter ajudado ... qq coisa envie ou post.
PS: por falar nisso qual BD vc usa ??
06/08/2004
Daniela
Eu resolvi assim:
O primeiro usuario esta editando o registro. Se um outro usuario tentar editar esse mesmo registro ao mesmo tempo o sistema vai gerar um erro entao eu fiz um tratamento de erro e toda vez que der esse erro o sistema mostra uma mensagem dizendo que tem alguem alterando essa informacao.
Talves tambem seria bom vc colocar um timer para limitar o tempo maximo de venda senao a pessoa pode ficar com o registro em uso eternamente.
Espero ter ajudado.
06/08/2004
Fernanda.sique
Obrigada pela força.
Minha dúvida e que acontece quando as vendedoras estão incluindo vendas novas, venda que não tem nada a ver uma com a outra - salvo que são gravadas na mesma tabela.
Muito estranho.
06/08/2004
Felipe_cduarte
manda um script das tabelas pra gente poder dar um olhada
[]´s
Clique aqui para fazer login e interagir na Comunidade :)