レコードセット: レコードのロック (ODBC)

このトピックの内容は、MFC ODBC クラスに該当します。

このトピックでは、次の内容について説明します。

レコードセットを使用してデータ ソースのレコードを更新するときに、他のユーザーが同時にレコードを更新しないよう、アプリケーションでレコードをロックできます。 2 人のユーザーが同時にレコードを更新できないことがシステムで保証されない限り、2 人のユーザーによって同時に更新されたレコードの状態は未定義です。

Note

このトピックの内容は、バルク行フェッチが実装されていない CRecordset の派生オブジェクトを対象にしています。 バルク行フェッチを実装している場合、一部の情報は適用されません。 たとえば、メンバー関数 EditUpdate は呼び出すことができません。 バルク行フェッチの詳細については、「レコードセット: バルク行フェッチ (ODBC)」を参照してください。

レコードロック モード

データベース クラスには、次の 2 つのレコードロック モードがあります。

  • 共有ロック (既定値)

  • 排他ロック

レコードの更新は、次の 3 つのステップで行われます。

  1. Edit メンバー関数を呼び出して操作を開始する。

  2. 現在のレコードの適切なフィールドを変更する。

  3. Update メンバー関数を呼び出して操作を終了する (通常は更新をコミットする)。

共有ロックでは、Update の呼び出し中にのみデータ ソースのレコードをロックします。 マルチユーザー環境で共有ロックを使用する場合、アプリケーションで Update のエラー状態が処理される必要があります。 排他ロックでは、Edit を呼び出すとすぐにレコードをロックし、Update を呼び出すまで解放しません (エラーは Update で返される FALSE の値ではなく、CDBException メカニズムを通じて示されます)。 排他ロックを使用すると、他のユーザーのパフォーマンスが低下する可能性があります。同じレコードへの同時アクセスにより、アプリケーションの Update プロセスが完了するまで待機しなければならない場合があるためです。

レコードセット内のレコードのロック

レコードセットのオブジェクトのロック モードを既定から変更する場合は、Edit を呼び出す前にモードを変更する必要があります。

レコードセットの現在のロック モードを変更するには

  1. CRecordset::pessimistic または CRecordset::optimistic のいずれかを指定して、SetLockingMode メンバー関数を呼び出します。

新しいロック モードは、再度変更するか、レコードセットを閉じるまで有効なままです。

Note

現時点で、排他ロックに対応している ODBC ドライバーは比較的少数です。

関連項目

レコードセット (ODBC)
レコードセット: 結合 (ODBC)
レコードセット: レコードの追加、更新、削除 (ODBC)