[firebase-br] Transações Duplicadas

Adilson B. Cápua Jr. juniorcapua em yahoo.com.br
Ter Dez 27 20:40:28 -03 2005


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 






Mais detalhes sobre a lista de discussão lista