連載
» 2016年10月13日 05時00分 公開

Access VBAで学ぶ初心者のためのデータベース/SQL超入門(11):顧客管理フォームに、「条件に合致するレコードを検索する機能」を設置する (2/4)

[薬師寺国安,PROJECT KySS]

「顧客管理テーブル」内のレコードから、「性別」でフィルタリングして検索する

 フォーム上の空いている場所に、性別で検索するための「コンボボックス」を1つ配置する(図5)。コンボボックスの書式は、プロパティシートの「データ」タブにある「値集合ソース」へ「男;女」と指定し、値集合タイプは「値リスト」と指定しておく。ボックス名は「検索性別コンボボックス」と指定しておく。ラベル名は「性別でテーブルを検索」として、ラベルの書式は今までに設定した標準書式でよい。

配置するコントロール
コントロールの種類 名前
コンボボックス 検索性別コンボボックス

photo 図5 性別で検索するコンボボックスを配置する

検索性別コンボボックスの値が選択された時の処理

 続いて、検索性別コンボボックスのためのコードを記述していく。

 「検索性別コンボボックス」を選択した状態で、プロパティシート→「イベント」タブをクリックする。「▼」アイコンで[イベントプロシージャ]を選択し、「…」アイコンをクリックするとVBEが開き、

Private Sub 検索性別コンボボックス_Change()

End Sub


 のコードが生成される。これをリスト1のコードに書き換える。

Private Sub 検索性別コンボボックス_Change()
    DoCmd.OpenTable tableName:="顧客管理テーブル", DataMode:=acReadOnly
    DoCmd.GoToControl ControlName:="性別"
    DoCmd.FindRecord FindWhat:=検索性別コンボボックス.ItemData(検索性別コンボボックス.ListIndex)
    Do
     Dim 確認 As Integer
     確認 = MsgBox("次を検索しますか?", vbOKCancel)
    Select Case 確認
      Case 1
        DoCmd.FindNext
      Case 2
        Exit Do
     End Select
    Loop
End Sub
リスト1:選択された「性別」のレコードを検索する処理

 リスト1のコードは、以下のように記述してある。

 DoCmd.OpenTableで、検索対象のテーブル(顧客管理テーブル)を読み取り専用モードで開く。書式は下記の通りだ。

  • DoCmd.OpenTable(tableName:=カレントデータベースのテーブル名(必須),DataMode:=テーブルを開くときの入力モード
テーブルを開くときの入力モード
名前 説明
acAdd 新しいレコードを追加できるが、既存レコードの参照/編集はできない
acEdit 既存のレコードを参照/編集と、新しいレコードの追加ができる(既定値)
acReadOnly 読み取り専用
(出典:Office Dev Center「AcOpenDataMode 列挙 (Access)」)

 次に、DoCmd.GotoControlで検索対象のフィールド名を「性別」に指定する。書式は下記の通りだ。

  • DoCmd.GotoControl ControlName:=検索対象フィールド名

 DoCmd.FindRecordで、「検索性別コンボボックス」から選択された性別に合致するレコードを検索する。書式は下記の通りだ。

  • DoCmd.FindRecord(FindWhat:=検索対象となるデータ(必須))

 今回は全て「名前付き引数」で指定している。この他の引数については、下記のURLを参照してほしい。

(参考リンク)Office Dev Center「DoCmd.FindRecord メソッド (Access)



 続いて、DoLoopステートメント内で以下の処理を繰り返すよう記述する。

 Integer型の変数「確認」を宣言し、Msgboxで「次を検索しますか?」と表示させる。「OK」を選択、つまり、戻り値が「1」ならば、DoCmd.FindNextで、FindRecordメソッドと同じ条件で次のレコードを検索する。「Cancel」を選択、つまり、戻り値が「2」の場合は処理を抜ける。Msgboxの戻り値については下記のURLが参照になる。


 実行すると、図6のようになる。

photo 図6 検索性別コンボボックスよりどちらかの性別を選ぶと、顧客管理テーブル内の性別に合致するレコードが順次検索される

 次は、「複数の条件に合致するレコード」を検索する機能を追加しよう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。