トランザクション : トランザクションが更新処理に与える影響 (ODBC)
更新 : 2007 年 11 月
トランザクション中のデータ ソースの更新は、エディット バッファを使って管理されます (トランザクションを利用しない場合も同じです)。エディット バッファは、レコードセットのフィールド データ メンバの集合であり、現在のレコードが保存されます。AddNew や Edit の実行中は、エディット バッファの内容は一時的に待避されます。Delete 処理の場合は、現在のレコードの内容は待避されません。エディット バッファと現在のレコードの詳細については、「レコードセット : レコード更新のしくみ (ODBC)」を参照してください。
メモ : |
---|
バルク行フェッチを実装している場合は、AddNew、Edit、または Delete を呼び出すことはできません。その代わり、データ ソースの更新を処理するための関数を独自に記述する必要があります。バルク行フェッチの詳細については、「レコードセット : バルク行フェッチ (ODBC)」を参照してください。 |
トランザクション中の AddNew、Edit、Delete の操作は、コミットすることも、ロールバックすることもできます。CommitTrans と Rollback による現在のレコードの操作は、エディット バッファに正しく反映されないことがあります。現在のレコードの内容をエディット バッファに正しく反映させるには、CRecordset の更新用関数 AddNew、Edit、Delete と CDatabase のメンバ関数 CommitTrans、Rollback の連係を正しく理解する必要があります。
CommitTrans が更新処理に与える影響
次の表に CommitTrans がトランザクションに与える影響を示します。
CommitTrans が更新処理に与える影響
操作 |
データ ソースの状態 |
---|---|
AddNew と Update を実行後、CommitTrans を実行 |
データ ソースに新規レコードが追加されます。 |
AddNew 実行後、(Update を呼び出さずに) CommitTrans を実行 |
新規レコードは失われ、データ ソースには追加されません。 |
Edit と Update を実行後、CommitTrans を実行 |
更新結果がデータ ソースに反映されます。 |
Edit 実行後、(Update を呼び出さずに) CommitTrans を実行 |
レコードの更新結果は失われ、データ ソース上のレコードは変化しません。 |
Delete 実行後、CommitTrans を実行 |
データ ソース上のレコードが削除されます。 |
Rollback がトランザクションに与える影響
次の表に、Rollback がトランザクションに与える影響を示します。
Rollback がトランザクションに与える影響
操作 |
現在のレコードの状態 |
必要な処理 |
データ ソースの状態 |
---|---|---|---|
AddNew と Update を実行後、Rollback を実行 |
現在のレコードは、新規レコードを作るために一時的に待避されます。新規レコードは、エディット バッファに格納されます。Update 実行後、現在のレコードの内容がエディット バッファに戻されます。 |
|
Update によるデータ ソースへの追加は無効化されます。 |
AddNew 実行後、(Update を呼び出さずに) Rollback を実行 |
現在のレコードは、新規レコードを作るために一時的に待避されます。エディット バッファには新規レコードが格納されます。 |
エディット バッファに空の新規レコードを作るには、もう 1 回 AddNew を呼び出します。エディット バッファに元の値を復元する場合は、Move(0) を呼び出します。 |
Update が呼び出されていないので、データ ソースは変更されません。 |
Edit と Update を実行後、Rollback を実行 |
編集前の現在のレコードは一時的に待避されます。エディット バッファには、編集後のレコードの内容が格納されます。Update が呼び出された後も、編集前のレコードは待避されて残っています。 |
ダイナセットの場合 : いったん他のレコードにスクロールしてから再び元のレコードに戻ると、編集前のレコードがエディット バッファに戻されます。 スナップショットの場合 : Requery を呼び出すと、データ ソースの内容がレコードセットに呼び戻されます。 |
Update によるデータ ソースへの変更は無効化されます。 |
Edit 実行後、(Update を呼び出さずに) Rollback を実行 |
編集前の現在のレコードは一時的に待避されます。エディット バッファには、編集後のレコードの内容が格納されます。 |
エディット バッファに戻すには、もう 1 回 Edit を呼び出します。 |
Update が呼び出されていないので、データ ソースは変更されません。 |
Delete 実行後、Rollback を実行 |
現在のレコードの内容が削除されます。 |
Requery を呼び出すと、データ ソースの内容がレコードセットに呼び戻されます。 |
データ ソースに対する削除は無効化されます。 |
参照
概念
トランザクション : レコードセットからのトランザクション実行 (ODBC)