|

|
|
 |
2.3 レコードセットの内容をリストに表示する |
 |
|
|
|
|
|
レコードセットの内容をコンボボックスやリストボックスに表示する方法です。主に、外部のデータベースを使用している場合で、かつリンクテーブルを避けたい場合に使います。
※Access 2007など一部のバージョンでは「Microsoft ActiveX Object 2.x Library」を参照設定しないと利用できません。
|
|
|
|
|
|
| レコードセットをコンボ/リストボックスに設定するサンプル |
|
|
|
|
次のプログラムは、外部のデータベースに格納されているテーブルから読み込んだデータを、リストボックスの一覧に表示する処理のサンプルです。ADOでデータベースを開き、次にSQLを実行、最後に作成したレコードセットをコンボボックスのレコードセットに保存しています。作成した場所がフォームのイベント「開くとき(Form_Open)」のため、フォームを開いた(フォームビューに切り替えた)瞬間にコンボボックスの内容が自動的にセットされます。
ポイントは2カ所あります。一つ目は、SQLを実行する前にCursorLocationにadUseClientを設定している部分です。作成したレコードセットをコンボ/リストボックスなどで使用する場合は、必ずカーソル(=行の管理)をクライアント側に設定しておく必要があるためです。
■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
|
|
|
|
|
|
|