フォーム上に置いたリストボックスにテーブルのデータを表示し、そのリス
トからレコードを選択し、データを取得します。
● 準備 ●
テーブル:【顧客マスタ】
----------------------------------------------------------
フィールド名 データ型 サイズ (AC97の場合)
----------------------------------------------------------
ID オートナンバー (主キー)
氏名 テキスト型 20文字 40バイト
住所 テキスト型 100文字 200バイト
電話番号 テキスト型 13文字 13バイト
----------------------------------------------------------
フォーム:【顧客マスタフォーム】
(1) フォームの新規作成を行い、デザインモードにします。
(2) フォーム上にリストボックスを配置します。
リストボックスには複数のフィールドを表示しますので、ある程度の幅を
持たせておくようにして下さい。(9cm以上)
(3) テキストボックスを作成し、[氏名]という名前を付けます。
(4) コマンドボタンを作成し、[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の
チェックを持ってきて下さい。
|