RES: [firebase-br] Transações Duplicadas

Luiz Carlos luiz em rolamentosradial.com.br
Qua Dez 28 08:43:57 -03 2005


Eu costumo dar uma identificação aleatória para cada transação, por 
exemplo atribuo ao TransactionID o valor da função gettickcount da Unit 
Windows!

Abraço!

Luiz Carlos wrote:

> Adilson B. Cápua Jr. wrote:
>
>> 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
>>
>>
>>
>>  
>>
> Eu costumo dar uma identificação aleatória para cada transação, por 
> exemplo atribuo ao TransactionID o valor da função gettickcount da 
> Unit Windows!
>
> Abrasço.
>


-- 


------------------------------------------------------------------------
Luiz Carlos da Silva Soares
Analista de Sistemas 	  	
  	 
  	
 

Importadora de Rolamentos Radial Ltda.
  	[11] 3346-3731
  	www.rolamentosradial.com.br <http://www.rolamentosradial.com.br/>
  	luiz em rolamentosradial.com.br <mailto:luiz em rolamentosradial.com.br>
  	 






Mais detalhes sobre a lista de discussão lista