FireDAC.Comp.Client.TFDCustomTransaction.CommitRetaining

提供: RAD Studio API Documentation
移動先: 案内検索

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;

関連項目