次の方法で共有


レコードセット: アーキテクチャ (ODBC)

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

このトピックでは、レコードセット オブジェクトのアーキテクチャを構成するデータ メンバーについて説明します。

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

サンプル クラス

MFC ODBC コンシューマー ウィザードは、Visual Studio 2019 以降では利用できません。 引き続き、コンシューマーを手動で作成することはできます。

クラス追加ウィザードから MFC ODBC コンシューマー ウィザードを使用して、CRecordset から派生したレコードセット クラスを宣言すると、結果として得られるクラスは、次の単純なクラスで示される一般的な構造クラスを持ちます。

class CCourse : public CRecordset
{
public:
   CCourse(CDatabase* pDatabase = NULL);
   ...
   CString m_strCourseID;
   CString m_strCourseTitle;
   CString m_strIDParam;
};

クラスの先頭には、ウィザードによって一連のフィールド データ メンバーが書き込まれます。 クラスを作成するときに、1 つまたは複数のフィールド データ メンバーを指定する必要があります。 サンプル クラスのようにクラスが (データ メンバー m_strIDParam で) パラメーター化されている場合は、パラメーター データ メンバーを手動で追加する必要があります。 ウィザードでは、クラスへのパラメーターの追加はサポートされていません。

フィールド データ メンバー

レコードセット クラスの最も重要なメンバーは、フィールド データ メンバーです。 データ ソースから選択する各列のクラスには、その列に適したデータ型のデータ メンバーが含まれています。 たとえば、このトピックの冒頭で示したサンプル クラスには、CString および m_strCourseID と呼ばれる 2 つのフィールド データ メンバーがあり、どちらの型も m_strCourseTitle です。

レコードセットで一連のレコードが選択されるときに、フレームワークによって現在のレコード (Open を呼び出した後の、最初のレコードが現在のレコード) の列がオブジェクトのフィールド データ メンバーに自動的にバインドされます。 つまり、フレームワークでは適切なフィールド データ メンバーが、レコード列の内容を格納するバッファーとして使用されます。

ユーザーが新しいレコードまでスクロールすると、フレームワークはフィールド データ メンバーを使用して現在のレコードを表します。 フレームワークによって前のレコードの値が置換され、フィールド データ メンバーが更新されます。 フィールド データ メンバーは、現在のレコードの更新と新しいレコードの追加にも使用されます。 レコードの更新プロセスの一環として、該当するフィールド データ メンバーまたはメンバーに値を直接割り当てて、更新値を指定します。

パラメーターデータメンバー

クラスがパラメーター化されると、1 つ以上のパラメーター データ メンバーを持ちます。 パラメーター化されたクラスを使用すると、実行時に取得または計算した情報に基づいてレコードセットのクエリを実行できます。

通常、パラメーターは、次の例のように、選択範囲を絞り込むのに役立ちます。 このトピックの冒頭のサンプル クラスに基づいて、レコードセット オブジェクトが次の SQL ステートメントを実行できます。

SELECT CourseID, CourseTitle FROM Course WHERE CourseID = ?

"?" は実行時に指定するパラメーター値のプレースホルダーです。 レコードセットを構築してその m_strIDParam データ メンバーを MATH101 に設定すると、レコードセットの有効な SQL ステートメントは次のようになります。

SELECT CourseID, CourseTitle FROM Course WHERE CourseID = MATH101

パラメーター データ メンバーを定義することで、SQL 文字列内のパラメーターについてフレームワークに指示します。 フレームワークによってパラメーターがバインドされます。これにより ODBC にプレースホルダーを置き換える値を取得する場所を知らせることができます。 例では、結果のレコード セットには、Course テーブルから CourseID 列の値が MATH101 のレコードのみが含まれます。 このレコードのすべての指定した列が選択されます。 パラメーター (とプレースホルダー) は必要なだけ指定することができます。

MFC 自体はパラメーターに対して何も行いません。具体的には、テキストの置換は実行されません。 代わりに、MFC は ODBC にパラメーターを取得する場所を伝え、ODBC がデータを取得して、必要なパラメーター化を実行します。

パラメーターの順序は重要です。 これに関する情報とパラメーターの詳細については、「レコードセット: レコードセットのパラメーター化 (ODBC)」を参照してください。

m_nFieldsとm_nParamsの使用

ウィザードによってコンストラクターが自動的に書き込まれるときに、クラス内の field data members の数を指定する m_nFields データ メンバーの初期化も行われます。 任意のパラメーターをクラスに追加する場合は、パラメーター データ メンバーの数を指定する m_nParams データ メンバーの初期化も追加する必要があります。 フレームワークではデータ メンバーを使用するためにこれらの値が使用されます。

詳細と例については、「レコード フィールド エクスチェンジ: RFX の使い方」を参照してください。

関連項目

レコードセット (ODBC)
レコードセット: テーブル用のクラス宣言 (ODBC)
レコード フィールド エクスチェンジ (RFX)