セカンド レコードセットを利用してリスト ボックスを表示する方法

更新 : 2007 年 11 月

既定では、レコード ビューは 1 個のレコードセット オブジェクトに関連付けられます。このレコードセット オブジェクトのフィールドはレコード ビューのコントロールに対応付けられます。場合によっては、レコード ビューにリスト ボックス コントロールまたはコンボ ボックス コントロールを配置して、別のレコードセット (セカンド レコードセット) オブジェクトの値を表示する必要があります。ユーザーはレコード ビューに表示する情報のカテゴリをリスト ボックスで選択できます。ここでは、この処理を実行する方法について説明します。

466581w2.alert_note(ja-jp,VS.90).gifヒント :

データ ソースから取り込んだ文字列でコンボ ボックスやリスト ボックスを埋めると、処理が遅くなることがあります。多数のレコードからデータを取り込んでコントロールを埋めるようなデザインは避けてください。

ここで使用するモデルでは、メインのレコードセットを使用してフォーム上の各コントロールの値を決定し、セカンド レコードセットを使用してリスト ボックスまたはコンボ ボックスの内容を決定します。また、リスト ボックスから選択した文字列に応じて、メインのレコードセットのクエリを再実行するようにします。次の手順では、コンボ ボックスを使用しますが、リスト ボックスの場合も同じです。

セカンド レコードセットを利用してコンボ ボックスまたはリスト ボックスの内容を表示するには

  1. レコードセット オブジェクト (ODBC の場合は CRecordset、DAO の場合は CDaoRecordset) を作成します。

  2. コンボ ボックス コントロールを表す CComboBox オブジェクトへのポインタを取得します。

  3. コンボ ボックスを空にします。

  4. レコードセットを 1 レコードずつスクロールし、現在のレコードの文字列ごとに CComboBox::AddString を呼び出してコンボ ボックスに加えていきます。

  5. コンボ ボックスの選択内容を初期化します。

void CSectionForm::OnInitialUpdate()
{
    // ...

    // Fill the combo box with all of the courses
    CENROLLDoc* pDoc = GetDocument();
    if (!pDoc->m_courseSet.Open())
        return;

    // ...

    m_ctlCourseList.ResetContent();
    if (pDoc->m_courseSet.IsOpen())
    { 
        while (!pDoc->m_courseSet.IsEOF() )
        {
            m_ctlCourseList.AddString(
                pDoc->m_courseSet.m_CourseID);
            pDoc->m_courseSet.MoveNext();
        }
    }
    m_ctlCourseList.SetCurSel(0);
}

この関数ではセカンド レコードセット m_courseSet を使ってコースを抽出しています。また、レコード ビュー クラスに含まれる CComboBox コントロール m_ctlCourseList を使ってコースを表示します。

この関数はドキュメントから m_courseSet を取得して開きます。次に m_ctlCourseList を空にして、m_courseSet に含まれるレコードを順にスクロールします。各レコードに対してコンボ ボックスのメンバ関数 AddString が呼び出されて、コース ID の値がコンボ ボックスに加えられます。最後にコンボ ボックスの選択内容を設定します。

参照

概念

レコード ビュー

ODBC ドライバの一覧