トランザクション処理

適用先: Access 2013、Office 2013

ADO では、トランザクションを制御するために、 BeginTransCommitTrans 、および RollbackTrans の各メソッドを提供しています。 Connection オブジェクトでこれらのメソッドを使用すると、ソース データに対する一連の変更を 1 つの単位として、保存または取り消しを行うことができます。 たとえば、口座間で振り込みをするには、ある口座からその金額を引き出し、同じ金額を別の口座に入金します。 どちらかの更新が失敗すると、口座の残高が合わなくなります。 開いている 1 つのトランザクション内でこうした変更を行う場合、すべての変更が完了するか、すべての変更が取り消されるかのいずれかになります。

注:

すべてのプロバイダーでトランザクションがサポートされているわけではありません。 Connection オブジェクトの Properties コレクションに、プロバイダーがトランザクションをサポートしていることを示す "Transaction DDL" というプロバイダー定義のプロパティが表示されていることを確認してください。 プロバイダーがトランザクションをサポートしていない場合、これらのメソッドを呼び出すと、エラーが発生します。

BeginTrans メソッドを呼び出すと、 CommitTrans または RollbackTrans を呼び出してトランザクションを終了するまで、変更が直ちにコミットされなくなります。

CommitTrans メソッドを呼び出すと、その接続で開いているトランザクション内で行われた変更が保存され、トランザクションが終了します。 RollbackTrans メソッドを呼び出すと、開いているトランザクション内で行われた変更がすべて元に戻され、トランザクションが終了します。 開いているトランザクションがないときにこれらのメソッドを呼び出すと、エラーが発生します。

CommitTrans メソッドまたは RollbackTrans メソッドを呼び出すと、 Connection オブジェクトの Attributes プロパティの値に応じて、新規トランザクションが自動的に開始される場合があります。 Attributes プロパティが adXactCommitRetaining に設定されている場合、 CommitTrans メソッドが呼び出された後に、新規トランザクションが自動的に開始されます。 Attributes プロパティが adXactAbortRetaining に設定されている場合、 RollbackTrans メソッドが呼び出された後に、新規トランザクションが自動的に開始されます。

トランザクション分離レベル

Connection オブジェクトでトランザクションの分離レベルを設定するには、 IsolationLevel プロパティを使用します。 この設定は、次に BeginTrans メソッドを呼び出すまで有効になりません。 要求した分離レベルを使用できない場合、プロバイダーはその次に高い分離レベルを返すことがあります。 有効な値の詳細については、ADO プログラマリファレンスの IsolationLevel プロパティを参照してください。

入れ子になったトランザクション

入れ子になったトランザクションをサポートするプロバイダーの場合、開いているトランザクション内で BeginTrans メソッドを呼び出すと、入れ子になった新しいトランザクションが開始されます。 戻り値は入れ子のレベルを示します。戻り値 "1" は、最上位レベルのトランザクションを開いた (つまり、トランザクションが別のトランザクション内で入れ子になっていない) ことを示します。"2" は、第 2 レベルのトランザクション (最上位のトランザクション内に入れ子になったトランザクション) を開いたことを示します。 CommitTrans または RollbackTrans の呼び出しは、最後に開かれたトランザクションにのみ影響します。上位レベルのトランザクションを解決するには、現在のトランザクションを閉じるかロールバックする必要があります。