FireDAC.Comp.Client.TFDCustomConnection.Rollback
Delphi
procedure Rollback;
C++
void __fastcall Rollback(void);
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
procedure function |
public | FireDAC.Comp.Client.pas FireDAC.Comp.Client.hpp |
FireDAC.Comp.Client | TFDCustomConnection |
説明
現在のトランザクションでデータに加えられたすべての変更をキャンセルし、場合によってはトランザクションを終了します。
Rollback を呼び出すと、現在のトランザクションで INSERT/UPDATE/DELETE コマンドなどによりデータベースに加えられた変更をすべてキャンセルします。
FireDAC ではネストしたトランザクションをサポートしているため、現在のトランザクションは、直近の StartTransaction 呼び出しで開始されたトランザクションになります。ほとんどの DBMS のように、ネストしたトランザクションがデータベースでサポートされていない場合、FireDAC では、ネストしたトランザクションをセーブポイントを使ってエミュレートします。
Rollback を呼び出す前に、アプリケーションで InTransaction プロパティの状態を確認することができます。アプリケーションで Rollback を呼び出したときに現在のトランザクションがなければ、例外が発生します。
InterBase/Firebird データベースに対して Rollback を呼び出すと、このトランザクション オブジェクトに関連付けられているデータセットとコマンドがすべて閉じられ準備解除されます。その他の一部の DBMS(たとえば、MS SQL Server 2005 など)では、Rollback 呼び出しでアクティブな結果セットがすべて無効になります。FetchAll を強制的にアクティブなデータセットにするには、ReleaseClients メソッドを使用します。
Transaction プロパティが割り当てられている場合、Rollback 呼び出しは、Transaction.Rollback のショートカットです。そうでない場合は、Rollback はデフォルトの接続トランザクションで操作します。
例
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;