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

Danilo Rogério danilorsa_betta em yahoo.com.br
Ter Dez 27 22:16:13 -03 2005


olha, ja vi esse problema e era a variavel do tipo TTransactionDesc declarada na propria procedure.
   
  Eu Resolvi colocando-a na seção private ou na seção "var" antes do implementation. Agora, o porque eu não sei...
   
  Att.
  Danilo

Cristiano Testaí <cristiano_testai em hotmail.com> escreveu:
  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." 
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




______________________________________________
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.


Mais detalhes sobre a lista de discussão lista