マイクロソフトアクセスで広がる世界

アクセスのTIPS集

DAOを使ったフォーム検索の基本

説明

フォーム上に検索用テキストボックスを設置し、そこに入力された「語」を含むレコードを検索してフォームに表示させる。続けて結果表示させるための「次を検索」機能を付ける。

※技術ポイント
  • DAOレコードセットでのレコード検索
  • Recordset.FindFirst でのレコード検索
  • Recordset.FindNext でのカレントレコード以降の検索

作り方

1.使用するフォーム

次の「F_名簿」フォーム行います。名簿フォームには「T_名簿」のテーブルをレコードソースにしてあり、表示のフィールドがあります。

2.検索用コントロールの設置
  1. フォームをデザインビューで開き、ヘッダ部を表示させます。コントロールを設置するのに使います。高さは2センチが目安です。
  2. ツールボックスからテキストボックスを一つ、コマンドボタンを二つ、ヘッダ部に設置します。コマンドボタンが二つ必要なのは、 検索されるレコードが複数ありえるからです。一つは最初の検索用に、もう一つは次のレコードを検索するためです。
  3. 名前も付けておきます。ここでは次のように名付けました。
    テキストボックスに「Txt_検索語」、コマンドボタンに「Cmd_検索実行」「Cmd_次を検索」、ボタンの表題もそれぞれ「検索実行」 「次を検索」にします。
3.「検索実行」ボタンに検索機能をつける

※DAOのレコードセットを使います。参照設定で「Microsoft DAO 3.5 Object Liblary」を使えるようにしておいてください。

  1. @ クリック時イベントのプロシージャを作成します。
    (その手順)
    ボタン上で右クリックメニューで「イベントのビルド」をクリック、で「ビルダの選択」画面から「コードビルダ」をクリックします。
  2. 表示されたVBAエディタの作成されたプロシージャに次のようにコードを記述します。
    (検索実行ボタンのプロシージャ)
    ----------------------------------------------------------------------
    Private Sub Cmd_検索実行_Click()

    'DAOレコードセットを保存する変数宣言
    Dim rs As DAO.Recordset

    'フォームのレコードセットのコピーを代入
    Set rs = Me.RecordsetClone

    'テキストボックスの語を含むレコードを検索する(あいまい検索)
    rs.FindFirst "[氏名] Like '*" & Me!Txt_検索語 & "*'"

    '該当するレコードがない場合の分岐処理
    If rs.NoMatch Then
    MsgBox "見つかりません"
    Else

    'レコードセットのブックマークにフォームのレコードを合わせる
    Me.Bookmark = rs.Bookmark

    End If

    'DAOレコードセットを閉じる
    Set rs = Nothing

    End Sub

    ----------------------------------------------------------------------
4.「次を検索」ボタンに検索機能をつける
  1. クリック時イベントのプロシージャを作成します。
  2. 表示されたVBAエディタの作成されたプロシージャに次のようにコードを記述します。
    (次を検索ボタンのプロシージャ)
    ----------------------------------------------------------------------
    Private Sub Cmd_次を検索_Click()

    'DAOレコードセットを保存する変数宣言
    Dim rs As DAO.Recordset

    'フォームのレコードセットのコピーを代入
    Set rs = Me.RecordsetClone

    '現在のフォームのレコードに合わせる
    rs.Bookmark = Me.Bookmark

    'テキストボックスの値を含む語を検索する(あいまい検索)
    rs.FindNext "[氏名] Like '*" & Me!Txt_検索語 & "*'"

    '該当するレコードがない場合の分岐処理
    If rs.NoMatch Then
    MsgBox "最後まで検索しました"
    Else

    'レコードセットのブックマークにフォームのレコードを合わせる
    Me.Bookmark = rs.Bookmark

    End If

    'DAOレコードセットを閉じる
    Set rs = Nothing

    End Sub
    ----------------------------------------------------------------------
  3. 機能はこれで完成です。フォームビューで表示して操作し結果を確認してください。
5.その他の調整

付け加えた各コントロールの位置やラベルの調整は行っていません。分かりやすく使いやすい形状に仕上げてください。 テキストボックスのラベル表示は「氏名に含まれる文字を入力」とすると良いでしょう。

(この項終わり)