FireDAC.Comp.Client.TFDCustomTransaction.StartTransaction
Delphi
procedure StartTransaction;
C++
void __fastcall StartTransaction(void);
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
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;