レコードセット : レコード更新のしくみ (ODBC)

更新 : 2007 年 11 月

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

レコードセットでは、データ ソースからレコードを選択するほか、レコードを更新、削除、追加することもできます。レコードセットを更新できるかどうかは、データ ソースが更新可能かどうか、レコードセット オブジェクトを生成したときの設定内容、および生成した SQL の内容の 3 点によって決定されます。

ewce3tde.alert_note(ja-jp,VS.90).gifメモ :

CRecordset オブジェクトの SQL は、レコードセットを更新できるかどうかに影響します。SQL が結合または GROUP BY 句を含んでいる場合は、MFC は更新可能性を FALSE に設定します。

ewce3tde.alert_note(ja-jp,VS.90).gifメモ :

このトピックの内容は、バルク行フェッチが実装されていない CRecordset の派生オブジェクトを対象にしています。バルク行フェッチを使用する場合は、「レコードセット : バルク行フェッチ (ODBC)」を参照してください。

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

  • レコードセットを更新するために必要な操作とフレームワークの動作

  • レコードセットが編集バッファとして機能するしくみと、ダイナセットとスナップショットの違い

レコードセット : AddNew、Edit、Delete の動作のしくみ (ODBC)」では、レコードセットから見た各関数の動作について説明します。

レコードセット : 更新処理の詳細 (ODBC)」では、レコードセットの更新に関して詳しく説明しています。内容は、トランザクションが更新に及ぼす影響、レコードセットを閉じたときまたはスクロールしたときの現在処理中の更新に及ぼす影響、自分の更新処理と他のユーザーによる更新処理の関係などです。

レコードセット更新に必要な操作

レコードセットを使ってレコードの追加、編集、削除を行うために必要な操作と、それに対するフレームワークの動作を次の表に示します。

必要な操作とフレームワークの動作

プログラマの役割

フレームワークの役割

データ ソースが更新可能 (または追加可能) かどうかを確認します。

データ ソースの更新または追加の可能性を調べる CDatabase メンバ関数を提供します。

更新可能なレコードセットを開きます。

 

レコードセットが CRecordset 更新関数 (CanUpdate または CanAppend) の呼び出しで更新可能かどうかを調べます。

 

レコードセットのメンバ関数を呼び出してレコードの追加、編集、削除を行います。

レコードセット オブジェクトとデータ ソースとの間のデータ交換を管理します。

必要ならば、トランザクションで更新処理を制御します。

トランザクションを行うためのメンバ関数 CDatabase を提供します。

トランザクションの詳細については、「トランザクション (ODBC)」を参照してください。

エディット バッファ

レコードセットのフィールド データ メンバは、全体でエディット バッファを構成します。エディット バッファには、現在のレコードの内容が保存されます。レコードの更新処理では、このエディット バッファを使って現在のレコードを操作します。

  • レコードを追加するときは、エディット バッファを使って新しいレコードを作成します。レコードの追加が終了すると、レコードを追加する前に現在のレコードであったレコードが再び現在のレコードになります。

  • レコードを更新 (編集) するときは、エディット バッファを使ってレコードセットのフィールド データ メンバに新しい値を設定します。更新が終了すると、更新したレコードがそのまま現在のレコードになります。

AddNew または Edit を呼び出すと、後で復元できるように現在のレコードが待避されます。Delete を呼び出すと、現在のレコードは待避されず、削除したことを示す印が付けられます。また、この場合は、別のレコードにスクロールする必要があります。

ewce3tde.alert_note(ja-jp,VS.90).gifメモ :

レコードを削除する場合、エディット バッファは使用されません。現在のレコードを削除すると、レコードに削除したことを示す印が付けられます。別のレコードに移動 (スクロール) するまでは、レコードセットはどのレコードも示していません。

ダイナセットとスナップショット

ダイナセットでは、レコードをスクロールすると、レコードの内容が最新表示されます。スナップショットは、静的なレコードの状態なので、Requery を呼び出さない限り再表示されません。ダイナセットの全機能を利用するには、ODBC API 準拠レベルが合致した ODBC ドライバを使う必要があります。詳細については、「ODBC の基礎」と「ダイナセット」を参照してください。

参照

概念

レコードセット (ODBC)

レコードセット : AddNew、Edit、Delete の動作のしくみ (ODBC)