トランザクション: トランザクションが更新処理に与える影響 (ODBC)
データ ソースの更新は、編集バッファー (トランザクションの外部で使用されるのと同じ方法) を使用してトランザクション中に管理されます。 レコードセットのフィールド データ メンバーは、現在のレコードを含んだ編集バッファーとして集合的に機能します。これは、AddNew
または Edit
の際にレコードセットによって一時的にバックアップされます。 Delete
操作中、現在のレコードはトランザクション内ではバックアップされません。 編集バッファーと、更新プログラムによる現在のレコードの格納について詳しくは、「レコードセット: レコード更新のしくみ (ODBC)」をご覧ください。
Note
一括行フェッチを実装している場合は、AddNew
、Edit
、Delete
を呼び出すことはできません。 代わりに、データ ソースの更新を実行するための独自の関数を記述する必要があります。 バルク行フェッチの詳細については、「レコードセット: バルク行フェッチ (ODBC)」を参照してください。
トランザクション中には、AddNew
、Edit
、および Delete
の操作をコミットまたはロールバックできます。 CommitTrans
と Rollback
は、現在のレコードが編集バッファーに復元されない事態を引き起こす可能性があります。 現在のレコードが正しく復元されるようにするには、CDatabase
のメンバー関数 CommitTrans
および Rollback
が、CRecordset
の更新関数とどのように連携するのかについて理解しておくことが重要です。
CommitTrans が更新に与える影響
次の表は、CommitTrans
がトランザクションに与える影響について説明したものです。
CommitTrans が更新に与える影響
操作 | データ ソースの状態 |
---|---|
AddNew と Update 、その後 CommitTrans |
新しいレコードがデータ ソースに追加されます。 |
AddNew (Update はなし)、その後 CommitTrans |
新しいレコードは失われます。 レコードはデータ ソースに追加されません。 |
Edit と Update 、その後 CommitTrans |
編集がデータ ソースにコミットされます。 |
Edit (Update はなし)、その後 CommitTrans |
レコードに対する編集は失われます。 レコードはデータ ソース上で変更されません。 |
Delete 、その後 CommitTrans |
レコードがデータ ソースから削除されます。 |
ロールバックがトランザクションに与える影響
次の表は、Rollback
がトランザクションに与える影響について説明したものです。
ロールバックがトランザクションに与える影響
操作 | 現在のレコードの状態 | さらに必要となる操作 | データ ソースの状態 |
---|---|---|---|
AddNew と Update 、その後 Rollback |
新しいレコード用の領域を確保するために、現在のレコードの内容が一時的に格納されます。 新しいレコードが編集バッファーに入力されます。 Update が呼び出された後、現在のレコードが編集バッファーに復元されます。 |
Update によって加えられたデータ ソースへの追加は元に戻されます。 |
|
AddNew (Update はなし)、その後 Rollback |
新しいレコード用の領域を確保するために、現在のレコードの内容が一時的に格納されます。 編集バッファーに新しいレコードが含められます。 | AddNew を再度呼び出して、編集バッファーを空の新しいレコードに復元します。 または、Move (0) を呼び出して、古い値を編集バッファーに復元します。 |
Update が呼び出されていないので、データ ソースに変更は加えられていません。 |
Edit と Update 、その後 Rollback |
現在のレコードの編集されていないバージョンが一時的に格納されます。 編集バッファーの内容に対して編集が加えられます。 Update が呼び出された後、編集されていないバージョンのレコードは引き続き一時的に格納されます。 |
ダイナセット: 現在のレコードからスクロールし、編集されていないバージョンのレコードを編集バッファーに復元します。 スナップショット: Requery を呼び出して、データ ソースからのレコードセットを更新します。 |
Update によって加えられたデータ ソースへの変更は元に戻されます。 |
Edit (Update はなし)、その後 Rollback |
現在のレコードの編集されていないバージョンが一時的に格納されます。 編集バッファーの内容に対して編集が加えられます。 | Edit を再度呼び出して、編集されていないバージョンのレコードを編集バッファーに復元します。 |
Update が呼び出されていないので、データ ソースに変更は加えられていません。 |
Delete 、その後 Rollback |
現在のレコードの内容が削除されます。 | Requery を呼び出して、データ ソースから現在のレコードの内容を復元します。 |
データ ソースからのデータの削除が元に戻されます。 |
関連項目
トランザクション (ODBC)
トランザクション: レコードセットからのトランザクション実行 (ODBC)
CDatabase クラス
CRecordset クラス