レコードセット : レコードセットの構造 (ODBC)
更新 : 2007 年 11 月
このトピックの内容は、MFC ODBC クラスに該当します。
このトピックでは、レコードセット オブジェクトのアーキテクチャを構成するデータ メンバについて説明します。
フィールド データ メンバ
パラメータ データ メンバ
m_nFields と m_nParams の利用法
メモ : |
---|
このトピックの内容は、バルク行フェッチが実装されていない 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 であるレコードだけが格納されます。このレコードの、指定されたすべての列が選択されます。パラメータ (とクエリの "?" プレースホルダ) は、必要な数だけ指定できます。
メモ : |
---|
MFC 自体は、パラメータについては特に何もしません。具体的には、テキストも置き換えません。代わりに、パラメータを取得する場所を ODBC に伝えます。ODBC は、データを得て、必要なパラメータ化を実行します。 |
メモ : |
---|
パラメータの順序は重要です。パラメータの順序とパラメータの詳細については、「レコードセット : パラメータを利用したレコードセット (ODBC)」を参照してください。 |
m_nFields と m_nParams の利用法
ウィザードは、レコードセット クラスのコンストラクタを作成し、データ メンバ m_nFields の初期化コードを生成します。m_nFields は、クラスのフィールド データ メンバの総数を表す変数です。パラメータをクラスに追加した場合は、m_nParams データ メンバの初期化コードも追加する必要があります。この m_nParams データ メンバを使用して、パラメータ データ メンバの数を指定します。フレームワークは、これらの値を使用してデータ メンバを操作します。
詳細と例については、「レコード フィールド エクスチェンジ : RFX の使い方」を参照してください。