次の方法で共有


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

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

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

  • 利用できるレコード ロックの種類

  • 更新時にレコードセットのレコードをロックする方法

レコードセットを使ってデータ ソース上のレコードを更新するときに、レコードをロックすると、ほかのユーザーによって同時に同じレコードが更新されません。複数のユーザーによるレコードの同時更新が防止されないシステムで、2 人のユーザーが同時にレコードを更新した場合、結果は保証されません。

[!メモ]

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

レコード ロックのモード

データベース クラスのレコード ロックには、次の 2 つのモードが定義されています。

  • 共有ロック (既定)

  • 排他ロック

レコードの更新処理は、次の 3 段階に分けられます。

  1. メンバー関数 Edit を呼び出して、処理を開始します。

  2. 現在のレコードのフィールド値を変更します。

  3. 操作終了後は、通常、Update メンバー関数を呼び出して更新内容をコミットします。

共有ロックでは、Update が呼び出されている間だけ、データ ソース上のレコードがロックされます。マルチ ユーザー環境で共有ロックを利用する場合は、Update 失敗条件をアプリケーションで処理する必要があります。排他ロックでは、Edit が呼び出されるとすぐにレコードがロックされ、Update が呼び出されるまで解除されません。エラーは、Update の戻り値 FALSE ではなく、CDBException 機構によって示されます。排他ロックでは、Update 処理が終了するまで同一レコードに対する他のアクセスが待たされるため、他のユーザーの処理効率が低下します。

レコードをロックする方法

レコードセット オブジェクトのロック モードを既定モード以外に変更するときは、Edit を呼び出す前に変更します。

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

  • メンバー関数 SetLockingModeCRecordset::pessimistic または CRecordset::optimistic を指定して呼び出します。

新しく設定したモードは、再びモードを変更するか、レコードセットを閉じるまで有効です。

[!メモ]

現在排他ロックをサポートしている ODBC ドライバーは比較的少数です。

参照

概念

レコードセット (ODBC)

レコードセット: 結合 (ODBC)

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