[firebase-br] Transações Duplicadas

Cristiano Testaí cristiano_testai em hotmail.com
Qua Dez 28 10:24:40 -03 2005


Isso mesmo. Faça esse teste com identificador único e veja se o problema foi
resolvido.

[]´s
Cristiano Testaí
----------------------------------------------------------------------------
--------------------------------------------

Pois é, Cristiano, creio que o problema é o Identificador da transação!
Imaginei isso em primeira instância, mas queria ter certeza... Veja bem,
dentro do bloco try...except chamo algumas outras procedures para realizar
tarefas secundárias, como imprimir um certo "comprovante" do processo,
etc...
Mas acho que se houvesse algum problema ali, o except pegaria... Imagino
que seja mesmo isso!!! Vou criar um identificador único para cada estação
e ver se resolve o problema... Seria alterar essa linha abaixo?

  Efetua_Processo.TransactionID := 1;

E trocar esse 1 por um variável de controle da máquina cliente???

Grato pela ajuda!!!


+---------------------------------------+
  Adilson Bragança Cápua Jr.
  Linhares - ES             Brasil

  mailto    : juniorcapua em yahoo.com.br
              juniorcapua em gmail.com
  Mobile    : abcjr em oi.com.br
  Messenger : juniorcapua em hotmail.com
  Skype     : dellas_capua
  Blogger   : www.dellas.rg3.net
+---------------------------------------+
  Save a tree! Send an e-mail!

-----Mensagem original-----
De: lista-bounces em firebase.com.br
[mailto:lista-bounces em firebase.com.br] Em
nome de Cristiano Testaí
Enviada em: terça-feira, 27 de dezembro de 2005 20:08
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] Transações Duplicadas

Vc já depurou o programa e confirmou que o erro acontece dentro do bloco
try...except?  Se sim, deveria entrar no bloco except, ao menos que vc
execute determinados métodos que mesmo com try...except nao sao tratados,
como um ApplyUpdates do ClientDataSet, onde vc precisa manipular o evento
OnReconcilerError.
De acordo com o erro parece que esta sendo violado o identificador da
transação, ou seja, parece que esta sendo startada duas transações com o
mesmo ID(Efetua_Processo.TransactionID), o que não é permitido.

Espero ter ajudado,
[]´s

Cristiano Testaí


"Adilson B. Cápua Jr." <juniorcapua em yahoo.com.br>
wrote in message
news:25721.3585115553$1135719611 em news.gmane.org...
PessoALL,

   Tenho um programa já funcionando há mais de 1 ano!
O mesmo foi desenvolvido em Delphi 7 + DBExpress + Firebird 1.5! Bom,
recentemente um usuário numa rede com 15 máquinas me reportou que direto
quando vai fazer um certo processo recebe uma mensagem de erro informando
que há uma duplicação de transação...
    Bom, como já tinha visto em algumas mensagens, não é uma boa técnica de
programação você deixar uma transação aberta durante muito tempo, portanto,
deixo o usuário fazer tudo que precisa e ao Confirmar o processo,
automaticamente a transação é aberta, é efetuado todo o processo e, se tudo
correu bem é dado o commit, caso contrário, entra em ação o tal do RollBack.
Segue abaixo mais ou menos como faço:

procedure TForm_Processos.Conclusao;
var
  Efetua_Processo: Ttransactiondesc;
begin
  Processo_Sucesso := False;

  Efetua_Processo.TransactionID := 1;
  Efetua_Processo.IsolationLevel := xilReadCommitted;

  DM.Conexao.StartTransaction(Efetua_Processo);

  try
    Processo_Sucesso := True;

    // Meu código

    DM.Conexao.Commit(Efetua_Processo);
  except
    MessageDlg('Houve um problema ao efetuar processo!' + #13 +
               'Informe erro #36 ao nosso suporte!', mtError, [mbOk], 0);
    Processo_Sucesso := False;
    DM.Conexao.Rollback(Efetua_Processo);
  end;


Minha dúvida é a seguinte: será que pode estar havendo algum conflito com o
nome das transações? Tipo assim, dois usuários ao mesmo tempo iniciarem o
processo e o banco se perder e reportar esse erro... Antes de criar uma
possível solução envolvendo uma "identificação de estação" resolvi postar
esta mensagem aqui para ver se é isso mesmo... Devo lembrar que essas
transações são iniciadas, processadas e comitadas instantaneamente, ou seja,
tudo é feito "rapidinho"... Nenhuma delas fica aberta por muito tempo... É
só o tempo do próprio processamento (que por usa vez é muito rápido
também)!!!
O estranho é que o erro não é pego pelo except, ou seja, nosso usuário não
informou para nós o erro número 36 como pede a mensagem e sim informou uma
mensagem em "ingrês" [não sei muito bem como dizer, vou ler o que está
escrito aqui! :) ] dizendo que houve uma duplicação de transação!

Qualquer ajuda é bem vinda...


+---------------------------------------+
  Adilson Bragança Cápua Jr.
  Linhares - ES             Brasil

  mailto    : juniorcapua em yahoo.com.br
              juniorcapua em gmail.com
  Mobile    : abcjr em oi.com.br
  Messenger : juniorcapua em hotmail.com
  Skype     : dellas_capua
  Blogger   : www.dellas.rg3.net
+---------------------------------------+
  Save a tree! Send an e-mail!






_______________________________________________________
Yahoo! doce lar. Faça do Yahoo! sua homepage.
http://br.yahoo.com/homepageset.html



______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br Para editar
sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa










_______________________________________________________
Yahoo! doce lar. Faça do Yahoo! sua homepage.
http://br.yahoo.com/homepageset.html



______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa







Mais detalhes sobre a lista de discussão lista