2.3 レコードセットの内容をリストに表示する
レコードセットの内容をコンボボックスやリストボックスに表示する方法です。主に、外部のデータベースを使用している場合で、かつリンクテーブルを避けたい場合に使います。

※Access 2007など一部のバージョンでは「Microsoft ActiveX Object 2.x Library」を参照設定しないと利用できません。
レコードセットをコンボ/リストボックスに設定するサンプル
 次のプログラムは、外部のデータベースに格納されているテーブルから読み込んだデータを、リストボックスの一覧に表示する処理のサンプルです。ADOでデータベースを開き、次にSQLを実行、最後に作成したレコードセットをコンボボックスのレコードセットに保存しています。作成した場所がフォームのイベント「開くとき(Form_Open)」のため、フォームを開いた(フォームビューに切り替えた)瞬間にコンボボックスの内容が自動的にセットされます。

 ポイントは2カ所あります。一つ目は、SQLを実行する前にCursorLocationadUseClientを設定している部分です。作成したレコードセットをコンボ/リストボックスなどで使用する場合は、必ずカーソル(=行の管理)をクライアント側に設定しておく必要があるためです。

 ■CursorLocationに設定する内容

用途
adUseServer
規定値。サーバ側(接続先のデータベース)が作成したカーソルを使用する。
adUseClient
クライアント側(Access)が作成したカーソルを使用する。

 もう一つは、コンボボックスにレコードセットを保存する際に、Clone(クローン。Closeではない/笑)を使い、レコードセットの複製を保存している部分です。元のレコードセットをそのままセットしても問題ありませんが、レコードセットが確実に別なインスタンスとなるようCloneを使用して複製するのがおすすめです。

Option Compare Database
Option Explicit

Private Sub Form_Open(Cancel As Integer)

    Dim objCon As New ADODB.Connection
    Dim objRS  As New ADODB.Recordset
    Dim strSQL As String

    'データベースを開く
    objCon.Open "Driver={Microsoft Access Driver (*.mdb)};" _
              & "DBQ=C:\DATABASE\DBF.mdb;"

    'カーソルの設定[ポイント1]
    objRS.CursorLocation = adUseClient

    'SQLの実行
    strSQL = "select  都道府県コード, 都道府県名称" _
           & "  from  都道府県テーブル"
    objRS.Open strSQL, objCon, adOpenDynamic

    'レコードセットの複製をコピー[ポイント2]
    Set Me.cmbPrefCode.Recordset = objRS.Clone

    '後処理
    objRS.Close
    Set objRS = Nothing

End Sub
参考情報
 コンボボックスは、次のように設定してあることを前提としています。記載したプロパティ以外は初期値です。

 ■コンボボックス「cmbPrefCode」の設定(抜粋)
プロパティ
設定値
名前
cmbPrefCode
集合体タイプ
テーブル/クエリ
集合体ソース
設定しない(空欄のまま)
列数
2
列幅
0cm;2cm
連結列
1

 また、テールブルのレイアウトは次の内容を前提としています。

 ■テーブル「都道府県テーブル」のレイアウト
主キー
フィールド名
データ型
サイズ
書式

都道府県コード
数値型
長整数型


都道府県名称
テキスト型
20

Copyright(C) 1999-2006 結城圭介。 All rights reserved