HOME > 即効テクニック > AccessVBA > コーディング・デバッグ > リストボックスにテーブルを表示し、リストからレコードを取得する

即効テクニック

コーディング・デバッグ

リストボックスにテーブルを表示し、リストからレコードを取得する

(Access 97)
●概要●
フォーム上に置いたリストボックスにテーブルのデータを表示し、そのリストからレコードを選択し、データを取得します。

●手順●
テーブル:【顧客マスタ】
----------------------------------------------------------
フィールド名    データ型        サイズ      (AC97の場合)
----------------------------------------------------------
ID              オートナンバー  (主キー)
氏名            テキスト型      20文字      40バイト
住所            テキスト型      100文字     200バイト
電話番号        テキスト型      13文字      13バイト
----------------------------------------------------------

フォーム:【顧客マスタフォーム】
  1. フォームの新規作成を行い、デザインモードにします。
  2. フォーム上にリストボックスを配置します。
  3. リストボックスには複数のフィールドを表示しますので、ある程度の幅を 持たせておくようにして下さい。(9cm以上)
  4. テキストボックスを作成し、[氏名]という名前を付けます。
  5. コマンドボタンを作成し、[Command1]という名前を付けます。
●サンプルコード● フォームロード時、コマンドボタンクリック時にそれぞれ以下のプロシージャを記述します。 Private Sub Form_Load() 'リストボックスのプロパティ設定 With Me.リスト0 .RowSource = "Select * From 顧客マスタ Order By ID" .ColumnCount = 4 .ColumnWidths = "0.5cm;2.0cm;2.5cm;4.0cm" .ColumnHeads = True .SetFocus End With End Sub Private Sub コマンド2_Click() Dim intListIdx As Integer 'リストインデックス格納 Dim Rst As DAO.Recordset 'レコードセット '選択されたリストインデックスの取得 intListIdx = Me.リスト0.ListIndex If intListIdx = -1 Then MsgBox "リストボックスの値を選択してください" Me.リスト0.Selected(1) = True Exit Sub End If 'リストボックスのRowSourceを元にレコードセット作成 Set Rst = CurrentDb.OpenRecordset(Me.リスト0.RowSource) 'レコードセットの移動 Rst.MoveFirst Rst.Move intListIdx 'テキストボックスにレコードセットの値を代入 Me.氏名 = Rst!氏名 '終了処理 Rst.Close Set Rst = Nothing End Sub ●詳細● フォームロード時には、リストボックスのプロパティを設定しています。 RowSource/値集合ソースを指定することにより、テーブルのデータをリストボックスに表示することが出来ます。 そして、各フィールドを表示できるよう、ColumnCount/列数プロパティをフィールドと同数設定し、列幅を設定するためにColumnWidthsを使っています。 似たプロパティにColumnWidthがありますが、これはデータシートビューの列幅を一括で変更するものですので、注意が必要です。 コマンドボタンがクリックされた時には、選択されたリスボックスを判別して、それに応じたレコードセットの[氏名]フィールドを表示しています。 その際にリストから取得できるのはListIndexだけですので、リストボックスに表示されているデータと同じ並び順のレコードセットを取得します。そして、リストインデックスと同じ数だけレコードセット(カーソル)を移動します。 また、リストインデックスは0から始まりますので、最初のレコードが選択されていた場合にはレコードを0移動することになり、結果正しいレコードを取得することが出来ます。 ●備考● Access2000の場合、デフォルトではDAOに参照設定されていません。 Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。 その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOのチェックを持ってきて下さい。