FireDAC.Comp.Client.TFDCustomConnection.CommitRetaining
Delphi
procedure CommitRetaining;
C++
void __fastcall CommitRetaining(void);
Inhaltsverzeichnis
Eigenschaften
Typ | Sichtbarkeit | Quelle | Unit | Übergeordnet |
---|---|---|---|---|
procedure function |
public | FireDAC.Comp.Client.pas FireDAC.Comp.Client.hpp |
FireDAC.Comp.Client | TFDCustomConnection |
Beschreibung
Speichert die Datenänderungen dauerhaft, die in der aktuellen Transaktion vorgenommen wurden, ohne die aktuelle Transaktion zu beenden.
Mit CommitRetaining speichern Sie Änderungen (wie z. B. diejenigen, die von INSERT-, UPDATE- oder DELETE-Anweisungen verursacht wurden) dauerhaft, die in der aktuellen Transaktion an der Datenbank vorgenommen wurden, ohne die Transaktion zu beenden.
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.
Der Aufruf von CommitRetaining ist eine Kurzform für Transaction.CommitRetaining, wenn die Eigenschaft Transaction zugewiesen ist. Ansonsten arbeitet CommitRetaining mit der Transaktion der Standardverbindung.
Vor dem Aufruf von CommitRetaining kann in einer Anwendung der Status der Eigenschaft InTransaction ü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 IB/FB die native Funktionalität. Für andere DBMSs entspricht die Methode dem Aufruf von Commit gefolgt von StartTransaction.
Beispiel
procedure TForm1.DoThatButtonClick(Sender: TObject);
begin
FDConnection1.StartTransaction;
try
if CustomerQuery.Locate('ID', [100]) then begin
CustomerQuery.Edit;
CustomerQuery.FieldByName('status').AsString := 'top';
CustomerQuery.Post;
FDConnection1.ExecSQL('delete from debt where CustID = 100');
FDConnection1.CommitRetaining;
end;
except
FDConnection1.RollbackRetaining;
raise;
end;
end;