ページ レベル ロックとレコード レベル ロック
Microsoft Office 2000/Visual Basic プログラマーズ ガイド |
ユーザーが共有データベースのレコードを編集する場合、ほかのユーザーとの共有違反が発生しないようにデータをロックします。データをロックすると、ユーザーは読み取り専用としてデータベースを表示できますが、変更できるのはレコードを編集しているユーザーのみとなります。
Jet データベース エンジンの前のバージョン (バージョン 3.5x 以前) では、レコードのロックによりデータの 1 ページがロックされます。データベース ファイル内の 1 ページあたりのデータ サイズは、前のバージョンでは 2 K (2048 バイト) でしたが、現在のバージョンの Jet 4.0 では、4 K (4096) になります (以前のバージョンで採用されていた 1 バイトではなく、Jet 4.0 では 2 バイトを使用する Unicode 文字でデータを保存するため、サイズが 2 倍)。ページ レベルでロックすると、2 つ以上のレコードを合わせた長さがページ サイズよりも小さくなる場合は、複数レコードをロックすることができます。この機能により、ロックしたページ内にあるレコードの編集作業を終了するまで、ほかのユーザーがそのページ内のレコードを編集することはできなくなります。ページ ロックにより、一般的なパフォーマンスは向上しますが、ほかのユーザーにデータの編集を許す機能は低下します。
Jet 4.0 には、ページではなく、レコード単位でロックできる新機能が搭載されています。これは、Access では [ツール] メニューから開く [オプション] ダイアログ ボックスの [詳細] タブにある [レコード レベルでロックして開く] オプションで制御される機能で、この設定は既定でオンに設定されていて、データベース内の同一ページにある 2 つのレコードを 2 人のユーザーがそれぞれ更新/削除することができます (ページ レベル ロックでペシミスティック ロックを使用している場合はできません)。有効なロック モードは、最初にデータベースを開いたユーザーによって決定されます。このユーザーが [レコード レベルでロックして開く] 設定をオンにしている場合、同じデータベースを後から開いたユーザーは、その設定のオン/オフ状態に関係なく、レコード レベル ロックを使用することになります。逆に、最初にデータベースを開いたユーザーがこの設定をオフにしている場合、同じデータベースを後から開いたユーザーはページ レベル ロックを使用することになります。
レコード レベル ロックをオンにすると、Access フォームおよびデータシートから編集したデータにはレコード レベル ロックが使用されます。また、DAO OpenRecordset メソッドで開いた Recordset オブジェクト、および Recordset オブジェクトを開くまたは返す ADO メソッド (Microsoft Jet 4.0 OLE DB provider を使用する場合) にもレコード レベル ロックが使用されます。一方、ADO (Microsoft Jet 4.0 OLE DB Provider を使用する場合)、DAO、または Access クエリ ユーザー インターフェイスから実行し、レコードの追加、削除、修正に使用する SQL Data Manipulation Language (DML) クエリには、ページ レベル ロックが使用されます。SQL DML ステートメントにページ レベル ロックを使用すると、多数のレコードで作業する場合のパフォーマンスが向上します。また、レコード レベル ロックをオンにしても、メモ フィールドやインデックス フィールドの値の更新には適用されないため、これらの操作を行う場合は、ページ レベル ロックに設定してください。
DAO Recordset オブジェクト、Access フォーム/データシート、または Access クエリ ユーザー インターフェイスから実行される SQL DML ステートメントについては、プログラム上からレコード ロックの設定を上書きすることはできません。
Microsoft Jet 4.0 OLE DB Provider で ADO を使用し、Access データベースで作業する場合は、データベースを開く前に Connection オブジェクトにあるプロバイダ特定の Jet OLEDB:Database Locking Mode プロパティを設定し、次に SQL DML ステートメントの実行、または Recordset オブジェクトを開く/返すメソッドに使用する Recordset オブジェクトのプロバイダ特定の Granularity プロパティを設定します。Jet OLEDB:Database Locking Mode および Jet OLEDB:Locking Granularity プロパティの詳細については、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Appendixes フォルダに含まれる ADOProperties.doc を参照してください。