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