Array
(
)

Erro de transações concorrentes

Fernanda.sique
   - 05 ago 2004

Bom dia,

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.

Abraços,
Fernanda.

Marcus.magalhaes
   - 05 ago 2004

Bom dia Fernanda, td bem?

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,

Fernanda.sique
   - 05 ago 2004

Muito obrigada pela atenção.

Em todas as rotinas eu coloco StartTransaction e no final Commit.

Será que tem alguma configuração para fazer nos objetos?

Marcus.magalhaes
   - 05 ago 2004

Oi Fernanda,

infelizmente em linguagem de programação eu não posso te ajudar pq não sei, conheço mais banco de dados.

Att,

Felipe_cduarte
   - 05 ago 2004

Fala Fernanda blz ???

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

Fernanda.sique
   - 05 ago 2004

Ai Felipe estou desesperada, nunca vi isto antes. Vou explicar:
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?

Felipe_cduarte
   - 06 ago 2004

Oi Fernanda tudo bom ?

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

Daniela
   - 06 ago 2004

Ja tive esse problema porém no VB.

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.

Fernanda.sique
   - 06 ago 2004

Oi Daniela,

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.

Felipe_cduarte
   - 06 ago 2004

Fernanda,

manda um script das tabelas pra gente poder dar um olhada

[]´s

Daniela
   - 06 ago 2004

Não entendi então o seu problema...