ローカル トランザクションの利用
メモ: ボーランド データベース エンジン(BDE)の使用は推奨されません。今後 BDE は機能拡張されません。たとえば、BDE では Unicode がサポートされていません。BDE を使用して新たに開発しないことをお勧めします。既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。
BDE は、Paradox、dBASE、Access、および FoxPro のテーブルに対するローカルトランザクションをサポートしています。コーディングの面では、ローカルトランザクションでもリモートデータベースサーバーにあるトランザクションでも違いはありません。
メモ: Paradox、dBASE、Access、および FoxPro のローカルテーブルでトランザクションを使用する場合、TransIsolation はデフォルトの tiReadCommitted ではなく tiDirtyRead に設定してください。ローカルテーブルで TransIsolation が tiDirtyRead 以外に設定されると BDE エラーが返されます。
ローカルテーブルに対してトランザクションを開始すると、そのテーブルに対して実行された更新がログに記録されます。ログの各レコードには、レコードの以前のレコードバッファが記録されます。トランザクションがアクティブな場合、更新されるレコードは、そのトランザクションがコミットされるかロールバックされるまでロックされます。ロールバック時には、更新したレコードに対して以前のレコードバッファが使用され、レコードが更新前の状態に復元されます。
ローカルトランザクションは、SQL サーバーまたは ODBC ドライバに対するトランザクションよりも制限があります。特に、ローカルトランザクションには以下の制限があります。
- クラッシュの自動復元はない
- データ定義文はサポートされていない
- 一時テーブルに対してはトランザクションを実行できない
- TransIsolation レベルは tiDirtyRead 以外に設定してはならない
- Paradox の場合、ローカルトランザクションを実行できるのは、有効なインデックスがあるテーブルに対してだけである。インデックスがない Paradox テーブルでは、データをロールバックできない
- 少数のレコードしかロックおよび変更できない。Paradox テーブルでは 255 レコードまで、dBASE テーブルでは 100 レコードまでに限られる
- BDE ASCII ドライバに対してはトランザクションを実行できない
- トランザクション中にテーブル上でカーソルを閉じると、以下の場合を除いて、トランザクションはロールバックされる:
- 複数のテーブルを開いているとき
- 変更しなかったテーブル上でカーソルを閉じるとき