レコードセット: レコード更新のしくみ (ODBC)
このトピックの内容は、MFC ODBC クラスに該当します。
レコードセットは、データ ソースからレコードを選択できるだけでなく、(必要に応じて) 選択したレコードを更新または削除したり、新しいレコードを追加したりすることもできます。 レコードセットの更新可能性は、接続されたデータ ソースが更新可能かどうか、レコードセット オブジェクトの作成時に指定するオプション、作成される SQL という 3 つの要素によって決まります。
Note
CRecordset
オブジェクト基づく SQL が、レコードセットの更新可能性に影響する場合があります。 たとえば、SQL に結合または GROUP BY 句が含まれる場合、MFC により更新可能性が FALSE に設定されます。
Note
このトピックの内容は、バルク行フェッチが実装されていない CRecordset
の派生オブジェクトを対象にしています。 バルク行フェッチを使用する場合は、「レコードセット: レコードの一括フェッチ (ODBC)」を参照してください。
このトピックでは、次の内容について説明します。
レコードセットの更新におけるロールとフレームワークがユーザーに対して行う操作。
「レコードセット: AddNew、Edit、Delete の動作のしくみ(ODBC)」で、レコードセットの観点からこれらの関数のアクションについて説明します。
「レコードセット: 更新の詳細 (ODBC)」では、トランザクションが更新に与える影響、レコードセットの終了またはスクロールが進行中の更新に与える影響、更新プログラムが他のユーザーの更新プログラムと連携する方法について解説するため、レコードセットの更新に関する包括的な情報を確認できます。
レコードセットの更新におけるロール
次の表は、レコードセットを使用してレコードを追加、編集、または削除する場合のロールと、フレームワークの役割を示しています。
レコードセットの更新: 自分とフレームワーク
あなたが | フレームワークの役割 |
---|---|
データ ソースが更新可能 (または追加可能) かどうかを判断します。 | データ ソースの更新可能性または追加可能性をテストするための CDatabase メンバー関数を提供します。 |
更新可能なレコードセット (任意の種類) を開きます。 | |
CanUpdate や CanAppend などの CRecordset 更新関数を呼び出して、レコードセットが更新可能かどうかを判断します。 |
|
レコードセット メンバー関数を呼び出して、レコードを追加、編集、および削除します。 | レコードセット オブジェクトとデータ ソースの間でデータを交換するメカニズムを管理します。 |
必要に応じて、トランザクションを使用して更新プロセスを制御します。 | トランザクションをサポートする CDatabase メンバー関数を提供します。 |
トランザクションの詳細情報については、「トランザクション (ODBC)」を参照してください。
編集バッファー
まとめると、レコードセットのすべてのフィールド データ メンバーは、1 つのレコード (現在のレコード) を含む編集バッファーとして機能します。 更新操作では、このバッファーを使用して現在のレコードを操作します。
レコードを追加すると、編集バッファーを使用して新しいレコードが作成されます。 レコードの追加が完了すると、以前に最新だったレコードが再び最新になります。
レコードを更新 (編集) すると、編集バッファーを使用してレコードセットのフィールド データ メンバーが新しい値に設定されます。 更新が完了すると、更新されたレコードは引き続き最新の状態になります。
AddNew または Edit を呼び出すと、必要に応じて後で復元できるよう、現在のレコードが保存されます。 Delete を呼び 出すと、現在のレコードは保存されず、削除済みとしてマークされ、別のレコードにスクロールする必要があります。
Note
編集バッファーは、レコードの削除に関し何の役割も果たしません。 現在のレコードを削除すると、レコードは削除済みとしてマークされ、別のレコードにスクロールするまでこのレコードセットは「レコードに含まれません」。
ダイナセットとスナップショット
レコードにスクロールすると、ダイナセットがレコードの内容を更新します。 スナップショットはレコードの静的表現であるため、Requery を呼び出さない限り、レコードの内容は更新されません。 ダイナセットのすべての機能を使用するには、適切なレベルの ODBC API サポートに準拠する ODBC ドライバーを使用する必要があります。 詳細については、「ODBC」と「ダイナセット」を参照してください。