レコードセット: レコードセットの構造 (ODBC)
このトピックの内容は、MFC ODBC クラスに該当します。
このトピックでは、レコードセット オブジェクトのアーキテクチャを構成するデータ メンバーについて説明します。
Note
このトピックの内容は、バルク行フェッチが実装されていない CRecordset
の派生オブジェクトを対象にしています。 バルク行フェッチが実装されている場合も、アーキテクチャはほぼ同じです。 違いを理解するには、「レコードセット: バルク行フェッチ (ODBC)」を参照してください。
サンプル クラス
Note
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
で) パラメーター化されている場合は、パラメーター データ メンバーを手動で追加する必要があります。 ウィザードでは、クラスへのパラメーターの追加はサポートされていません。
フィールド データ メンバー
レコードセット クラスの最も重要なメンバーは、フィールド データ メンバーです。 データ ソースから選択する各列のクラスには、その列に適したデータ型のデータ メンバーが含まれています。 たとえば、このトピックの冒頭で示したサンプル クラスには、m_strCourseID
および m_strCourseTitle
と呼ばれる 2 つのフィールド データ メンバーがあり、どちらの型も CString
です。
レコードセットで一連のレコードが選択されるときに、フレームワークによって現在のレコード (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 のレコードのみが含まれます。 このレコードのすべての指定した列が選択されます。 パラメーター (とプレースホルダー) は必要なだけ指定することができます。
Note
MFC 自体はパラメーターに対して何も行いません。具体的には、テキストの置換は実行されません。 代わりに、MFC は ODBC にパラメーターを取得する場所を伝え、ODBC がデータを取得して、必要なパラメーター化を実行します。
Note
パラメーターの順序は重要です。 これに関する情報とパラメーターの詳細については、「レコードセット: レコードセットのパラメーター化 (ODBC)」を参照してください。
m_nFieldsとm_nParamsの使用
ウィザードによってコンストラクターが自動的に書き込まれるときに、クラス内の field data members の数を指定する m_nFields データ メンバーの初期化も行われます。 任意のパラメーターをクラスに追加する場合は、パラメーター データ メンバーの数を指定する m_nParams データ メンバーの初期化も追加する必要があります。 フレームワークではデータ メンバーを使用するためにこれらの値が使用されます。
詳細と例については、「レコード フィールド エクスチェンジ: RFX の使い方」を参照してください。
関連項目
レコードセット (ODBC)
レコードセット: テーブルにアクセスするレコードセット クラスの宣言 (ODBC)
レコード フィールド エクスチェンジ (RFX)