次の方法で共有


レコードセット : レコードセットの構造 (ODBC)

更新 : 2007 年 11 月

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

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

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

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

  • m_nFields と m_nParams の利用法

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

このトピックの内容は、バルク行フェッチが実装されていない CRecordset の派生オブジェクトを対象にしています。バルク行フェッチが実装されているレコードセットの構造も基本的に同じです。両者の差異については、「レコードセット : バルク行フェッチ (ODBC)」を参照してください。

クラスのサンプル

クラスの追加ウィザードの MFC ODBC コンシューマ ウィザード を使って CRecordset からの派生レコードセット クラスを宣言すると、次のような汎用構造のクラスが作成されます。

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

クラスの先頭には、一連のフィールド データ メンバがウィザードによって記述されます。クラスを作成するときは、1 つ以上のフィールド データ メンバを指定する必要があります。データ メンバ m_strIDParam を持つサンプル クラスのように、クラスをパラメータ化したときは、パラメータ データ メンバを直接追加する必要があります。ウィザードでクラスにパラメータを追加することはできません。

フィールド データ メンバ

レコードセット クラスで最も重要なメンバは、フィールド データ メンバです。データ ソースから選択した列ごとに、該当するデータ型のデータ メンバ変数がクラスに用意されます。たとえば、上記のクラスのサンプルでは、2 つの CString 型のフィールド データ メンバである m_strCourseID と 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 に結び付け、ODBC に対してプレースホルダ位置に挿入する値を取得する場所を知らせます。この例では、クエリ実行後のレコードセットには、Course テーブルから CourseID 列の値が MATH101 であるレコードだけが格納されます。このレコードの、指定されたすべての列が選択されます。パラメータ (とクエリの "?" プレースホルダ) は、必要な数だけ指定できます。

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

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

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

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

m_nFields と m_nParams の利用法

ウィザードは、レコードセット クラスのコンストラクタを作成し、データ メンバ m_nFields の初期化コードを生成します。m_nFields は、クラスのフィールド データ メンバの総数を表す変数です。パラメータをクラスに追加した場合は、m_nParams データ メンバの初期化コードも追加する必要があります。この m_nParams データ メンバを使用して、パラメータ データ メンバの数を指定します。フレームワークは、これらの値を使用してデータ メンバを操作します。

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

参照

概念

レコードセット (ODBC)

レコードセット : テーブルにアクセスするレコードセット クラスの宣言 (ODBC)

レコード フィールド エクスチェンジ (RFX)