FireDAC.Comp.Client.TFDCustomTransaction.CommitRetaining

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

procedure CommitRetaining;

C++

void __fastcall CommitRetaining();

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
procedure
function
public
FireDAC.Comp.Client.pas
FireDAC.Comp.Client.hpp
FireDAC.Comp.Client TFDCustomTransaction

Beschreibung

Speichert Datenänderungen dauerhaft, die in der aktuellen Transaktion vorgenommen wurden, ohne die aktuelle Transaktion zu beenden.

Mit CommitRetaining speichern Sie Änderungen dauerhaft, wie INSERT/UPDATE/DELETE-Anweisungen, die in der aktuellen Transaktion an der Datenbank vorgenommen wurden.

FireDAC unterstützt verschachtelte Transaktionen, daher handelt es sich bei der aktuellen Transaktion um diejenige, die zuletzt mit einem StartTransaction-Aufruf gestartet wurde. Wenn die Datenbank keine verschachtelten Transaktionen unterstützt, wie die meisten DBMSs, dann emuliert FireDAC verschachtelte Transaktionen anhand von Speicherpunkten. CommitRetaining eignet sich nur für die Haupttransaktion, nicht für verschachtelte Transaktionen.

Vor dem Aufruf von CommitRetaining kann in einer Anwendung der Status der Eigenschaft Active überprüft werden. Wenn in einer Anwendung CommitRetaining aufgerufen wird, obwohl keine aktuelle Transaktion vorhanden ist, wird eine Exception ausgelöst.

CommitRetaining verwendet für InterBase/Firebird die native Funktionalität. Für andere DBMSs entspricht die Methode dem Aufruf von Commit und dann von StartTransaction.

Beispiel

 
 procedure TForm1.ChangeButtonClick(Sender: TObject);
 begin
   FDQuery1.Transaction := FDTransaction1;
   FDQuery1.SQL.Text := 'select * from employees';
 
   FDQuery2.Transaction := FDTransaction1;
   FDQuery2.SQL.Text := 'update employees set salary = salary * :k where id = :id';
 
   FDTransaction1.StartTransaction;
   try
     FDQuery1.Open;
     while not FDQuery1.Eof do begin
       FDQuery2.ExecSQL('', [1.2, ADQuery1.FieldByName('id').AsInteger]);
       FDTransaction1.CommitRetaining;
       FDQuery1.Next;
     end;
     FDTransaction1.Commit;
   except
     FDTransaction1.Rollback;
     raise;
   end;
 end;

Siehe auch