FireDAC.Comp.Client.TFDCustomTransaction.StartTransaction

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

Delphi

procedure StartTransaction;

C++

void __fastcall StartTransaction();

プロパティ

種類 可視性 ソース ユニット
procedure
function
public
FireDAC.Comp.Client.pas
FireDAC.Comp.Client.hpp
FireDAC.Comp.Client TFDCustomTransaction

説明

その DBMS で新しいトランザクションを開始します。


StartTransaction を呼び出すと、その DBMS で新しいトランザクションを開始することができます。

FireDAC ではネストしたトランザクションをサポートしています。DBMS でネストしたトランザクションをサポートしていない場合、FireDAC はセーブポイントを使ってそれをエミュレートします。FireDAC は、トランザクションが既にアクティブであればセーブポイントを作成し、アクティブでなければ新しいトランザクションを開始します。Options.EnableNested を使用して、ネストしたトランザクションを有効または無効にすることができます。StartTransaction を呼び出す前に、アプリケーションで必要に応じて Options プロパティの設定を変更することができます。トランザクションが開始した後でオプションを変更しても、現在のトランザクションには反映されません。

StartTransaction を呼び出した後で行われた INSERT/UPDATE/DELETE などのデータ変更はすべて、Commit を呼び出して承認されるか、Rollback を呼び出して取り消されます。一部の DBMS では、アクティブな結果セットがある場合には、トランザクションを開始することができません(MS SQL Server 2005 など)。

 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.Options.Isolation := xiRepeatableRead;
   FDTransaction1.StartTransaction;
   try
     FDQuery1.Open;
     while not FDQuery1.Eof do begin
       FDQuery2.ExecSQL('', [1.2, FDQuery1.FieldByName('id').AsInteger]);
       FDTransaction1.CommitRetaining;
       FDQuery1.Next;
     end;
     FDTransaction1.Commit;
   except
     FDTransaction1.Rollback;
     raise;
   end;
 end;

関連項目