FireDAC.Comp.Client.TFDCustomTransaction.CommitRetaining
Delphi
procedure CommitRetaining;
C++
void __fastcall CommitRetaining();
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
procedure function |
public | FireDAC.Comp.Client.pas FireDAC.Comp.Client.hpp |
FireDAC.Comp.Client | TFDCustomTransaction |
説明
現在のトランザクションでデータに加えられた変更を永続的に保存します。現在のトランザクションは終了しません。
CommitRetaining を呼び出すと、現在のトランザクションで INSERT/UPDATE/DELETE
コマンドなどによりデータベースに加えられた変更を、トランザクションを終了しないまま、永続的に保存することができます。
FireDAC ではネストしたトランザクションをサポートしているため、現在のトランザクションは、直近の StartTransaction 呼び出しで開始されたトランザクションになります。ほとんどの DBMS のように、ネストしたトランザクションがデータベースでサポートされていない場合、FireDAC では、ネストしたトランザクションをセーブポイントを使ってエミュレートします。CommitRetaining を使用できるのはメイン トランザクションの場合だけで、ネストしたトランザクションでは使用できません。
CommitRetaining を呼び出す前に、アプリケーションで Active プロパティの状態を確認することができます。アプリケーションで CommitRetaining を呼び出したときに現在のトランザクションがなければ、例外が発生します。
CommitRetaining は、Interbase/Firebird の場合にはネイティブ機能を使用します。他の DBMS の場合、このメソッドは Commit を呼び出してから StartTransaction を呼び出すのと同じです。
例
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;