次の方法で共有


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

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

ヒント

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

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

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

  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 ドライバーの一覧