[firebase-br] >>>>> Help por favor , as transaçoes em DBExpress estão me enlouquecendo <<<<<<

Antonio Carlos a.lima.silva em terra.com.br
Ter Jul 25 15:13:28 -03 2006


Meus amigos, na literatura é dito que usando DbExpress e Delphi  voce 
controla uma transação assim :


begin
  try
    TD.TransactionID := 1;
    TD.IsolationLevel := xilREPEATABLEREAD;
    SQLConnection1.StartTransaction(TD);
    Sql4.Close;
    .....
    Sql4.ExecSQL;
    SQLConnection1.Commit(TD);
  except
    on e: Exception do
      begin
        SQLConnection1.Rollback(TD);
        MessageDlg('Erro XXXXXX : '+E.Message,mtError,[mbOK],0);
      end;
  end;

Isso funciona 100% se o banco esta sendo acessado apenas por um Client. So 
que quando ocorre de haver mais de um Client a executar o mesmo 
procedimento, da erro informando já haver um transação com esse ID

Ai fiz o seguinte :

var
 i : integer;
begin
  result := false;
  try
    i := 0;
    while i = 0 do i := Random(65000);
    TD.TransactionID := i;
    TD.IsolationLevel := xilREPEATABLEREAD;
    SQLConnection1.StartTransaction(TD);

Como podem ver a probabilidade de haver um mesmo ID para a transação é 
dificil mas não impossível e a M é que ocorre.

Estou fazendo algo errado  ?  Fico grato se puderem me ajudar.

Obrigado.

Antonio








Mais detalhes sobre a lista de discussão lista