レコードセット: レコードのロック (ODBC)
このトピックの内容は、MFC ODBC クラスに該当します。
このトピックでは、次の内容について説明します。
利用できるレコード ロックの種類
更新時にレコードセットのレコードをロックする方法
レコードセットを使ってデータ ソース上のレコードを更新するときに、レコードをロックすると、ほかのユーザーによって同時に同じレコードが更新されません。複数のユーザーによるレコードの同時更新が防止されないシステムで、2 人のユーザーが同時にレコードを更新した場合、結果は保証されません。
[!メモ]
このトピックの内容は、バルク行フェッチが実装されていない CRecordset の派生オブジェクトを対象にしています。バルク行フェッチを実装しているレコードセットには、一部の説明が該当しません。たとえば、Edit および Update の両メンバー関数を呼び出すことはできません。バルク行フェッチの詳細については、「レコードセット : バルク行フェッチ (ODBC)」を参照してください。
レコード ロックのモード
データベース クラスのレコード ロックには、次の 2 つのモードが定義されています。
共有ロック (既定)
排他ロック
レコードの更新処理は、次の 3 段階に分けられます。
共有ロックでは、Update が呼び出されている間だけ、データ ソース上のレコードがロックされます。マルチ ユーザー環境で共有ロックを利用する場合は、Update 失敗条件をアプリケーションで処理する必要があります。排他ロックでは、Edit が呼び出されるとすぐにレコードがロックされ、Update が呼び出されるまで解除されません。エラーは、Update の戻り値 FALSE ではなく、CDBException 機構によって示されます。排他ロックでは、Update 処理が終了するまで同一レコードに対する他のアクセスが待たされるため、他のユーザーの処理効率が低下します。
レコードをロックする方法
レコードセット オブジェクトのロック モードを既定モード以外に変更するときは、Edit を呼び出す前に変更します。
レコードセットのロック モードを変更するには
- メンバー関数 SetLockingMode を CRecordset::pessimistic または CRecordset::optimistic を指定して呼び出します。
新しく設定したモードは、再びモードを変更するか、レコードセットを閉じるまで有効です。
[!メモ]
現在排他ロックをサポートしている ODBC ドライバーは比較的少数です。