[firebase-br] Problemas com perda de dados

Campus campus em sinos.net
Qui Jun 28 14:22:17 -03 2007


Jeferson, baixei a 6.6.1 e continua igual, veja a sequencia do código.

Destaquei em maiúsculas

1 - StartStransaction (Transação)
2 - Commit (Transação)
3 - Disconnect (Conexão)
4 - Close (Conexão)

**********************************************
procedure TZConnection.StartTransaction;
begin
  CheckAutoCommitMode;

  if FExplicitTransactionCounter = 0 then
    AutoCommit := False;
  DoStartTransaction;
  Inc(FExplicitTransactionCounter);   <----- INCREMENTA SEM TESTAR O
CONTEUDO
end;


***********************************************
procedure TZConnection.Commit;
var
  ExplicitTran: Boolean;
begin
  CheckConnected;
  CheckNonAutoCommitMode;

  ExplicitTran := FExplicitTransactionCounter > 0;
  if FExplicitTransactionCounter < 2 then  <--------------- SE FOR MAIOR NÃO
COMITA E NÃO MUDA O VALOR DE AUTOCOMMIT PARA TRUE
  //when 0 then AutoCommit was turned off, when 1 StartTransaction was used
  begin
    ShowSQLHourGlass;
    try
      try
        FConnection.Commit;
      finally
        FExplicitTransactionCounter := 0;
        if ExplicitTran then
          AutoCommit := True;
      end;
    finally
      HideSQLHourGlass;
    end;
    DoCommit;
  end
  else
    Dec(FExplicitTransactionCounter);   <-------- SÓ DECREMENTA
end;

****************************************
procedure TZConnection.Disconnect;
begin
  if FConnection <> nil then
  begin
    DoBeforeDisconnect;

    ShowSqlHourGlass;
    try
      CloseAllDataSets;
      FConnection.Close;  <---------- CHAMA O FECHAMENTO DA CONEXÃO
      FConnection := nil;
    finally
      HideSqlHourGlass;
    end;

    DoAfterDisconnect;
  end;
end;



**********************************************
procedure TZInterbase6Connection.Close;
begin
  if Closed then Exit;

  if FTrHandle <> nil then
  begin
    if AutoCommit then   <--------  SE NÃO FOR TRUE FAZ O ROLBACK
    begin
      FPlainDriver.isc_commit_transaction(@FStatusVector, @FTrHandle);
      DriverManager.LogMessage(lcTransaction, FPlainDriver.GetProtocol,
        Format('COMMITT TRANSACTION "%s"', [Database]));
    end else begin
      FPlainDriver.isc_rollback_transaction(@FStatusVector, @FTrHandle);
      DriverManager.LogMessage(lcTransaction, FPlainDriver.GetProtocol,
        Format('ROLLBACK TRANSACTION "%s"', [Database]));
    end;
    FTrHandle := nil;
    CheckInterbase6Error(FPlainDriver, FStatusVector, lcDisconnect);
  end;

  if FHandle <> nil then
  begin
    FPlainDriver.isc_detach_database(@FStatusVector, @FHandle);
    FHandle := nil;
    CheckInterbase6Error(FPlainDriver, FStatusVector, lcDisconnect);
  end;

  DriverManager.LogMessage(lcConnect, FPlainDriver.GetProtocol,
      Format('DISCONNECT FROM "%s"', [Database]));

  inherited Close;
end;


----- Original Message ----- 
From: "Jeferson Oliveira" <jefersonfoliveira em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, June 28, 2007 9:43 AM
Subject: Re: [firebase-br] Problemas com perda de dados


Campus escreveu:
> Magno, no meu entender o Zeos tem um bug, não olhei as outras versões. eu
> tenho a 6.1.5.

Olá Campus!

Sugiro que faça um teste na versão atual do Zeos, que é a 6.6.1 beta.
Muitos problemas foram corrigidos desde a versão 6.1.5, e é possível
que esse também tenha sido.
Vale a pena conferir: http://forum.zeoslib.net.ms/

P.S.: Se possível comente aqui o resultado dos testes.


Abraço!
Jeferson Oliveira

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.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


-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.476 / Virus Database: 269.9.10/873 - Release Date: 26/06/2007
23:54






Mais detalhes sobre a lista de discussão lista