Microsoft Access Club >初心者講座 >Mail管理ソフト >このページ >次頁 - 前項


検索フォームの作成:Mail管理ソフト15



今回は、個人情報を登録するフォームの作成に引き続き、格納済みのテーブルデータを検索するフォームを解説します。データ入力とデータ検索は対になります。

フォームの主旨とデザインビュー

このフォームは入力済みの個人情報を検索します。検索対象としては以下の項目を予定しています。

  1. 登録ID (テキストボックス)
  2. ctlふりがな(テキストボックス)
  3. ctlメールアドレス(テキストボックス)
  4. ctl生年月日(テキストボックス)
  5. ctl性別 (コンボボックス)
  6. ctl送信可否 (コンボボックス)

赤枠が抽出条件を選択するフィールドになります。

このフォームは連結フォームです。フォームのレコードソースには、tbl_kihonテーブルを元にしたクエリを配置します。

Filter適用とWhere条件

フォーム上にテーブルレコードを抽出して表示させる場合、Filterを適用する場合とWhere条件を用いてデータを抽出する場合とがあります。それぞれの特徴は以下のとおりです。なお、今回は、Filter機能を用いてテーブルレコードを抽出します。

Filter機能

データの絞り込みをする機能です。全レコードを対象にして抽出条件を設定しフィルターをかけます。フィルターを解除することで、全レコードを表示させることが簡単に実現できます。

プロシージャ内で FilterOnプロパティにTrueを設定しFilterプロパティを実行させます。設定値は、文字列式で、WHERE 句から WHERE を省いたものです。たとえば、次の Visual Basic コードは、都道府県フィールドで東京都だけを抽出するフィルタを実行します。

Me.Filter = "都道府県 = '東京'"
Me.FilterOn = True
Where機能

フォームのレコードソースであるクエリ自体に抽出条件を設定しデータを抽出します。SQLのWhere句ですから、クエリの抽出条件欄に記述します。

検索フィールドの詳細

これらフィールドに対して特に加工は不要です。

  1. 登録ID (テキストボックス、txt_登録ID)
  2. ctlふりがな(テキストボックス、txt_ふりがな)
  3. ctlメールアドレス(テキストボックス、txt_メールアドレス)
  4. ctl生年月日(テキストボックス、txt_生年月日)
  5. ctl性別 (コンボボックス、cmb_性別)ctl
  6. ctl送信可否 (コンボボックス、cmb_送信可否)

これらフィールドは全て非連結です。

コマンドボタンの配置

フィルターを実行するコマンドボタン(cmb_実行)とフィルターを解除するコマンドボタン(cmb_クリア)を配置します。

フィルターの実行

コマンドボタン(cmb_実行)のクリック時イベントプロシージャを以下のように作成します。

Private Sub cmd_実行_Click()

    Dim varEmail As Variant
    Dim varふりがな As Variant
    Dim var性別 As Variant
    Dim var生年月日 As Variant
    Dim var送信可否 As Variant
    Dim varID As Variant
    Dim varfilter As Variant
    
    varEmail = Me.txt_Email
    varふりがな = Me.txt_ふりがな
    var性別 = Me.cmb_性別
    var生年月日 = Format(Me.txt_生年月日, "yyyy/mm/dd")
    var送信可否 = Me.cmb_送信可否
    varID = Me.txt_登録ID
    
    If Not IsNull(Me.txt_Email) Then ' --- A
        varfilter = "メールアドレス LIKE '*" & varEmail & "*'" ' --- B
    Else
        varfilter = "メールアドレス LIKE '*'"
    End If
    
    If Not IsNull(Me.txt_登録ID) Then
        varfilter = varfilter & " AND 登録ID = " & varID
    End If
    
    If Not IsNull(Me.txt_ふりがな) Then
        varfilter = varfilter & " AND ふりがな LIKE " & "'*" & varふりがな & "*'"
    End If
    
    If Not IsNull(Me.cmb_性別) Then
        varfilter = varfilter & " AND 性別 = " & "'" & var性別 & "'"
    End If
    
    If Not IsNull(Me.txt_生年月日) Then
        varfilter = varfilter & " AND 生年月日 =" & "#" & var生年月日 & "#"
    End If
    
    If Not IsNull(Me.cmb_送信可否) Then
        If Me.cmb_送信可否.Column(0) = "可能" Then ' --- C
            varfilter = varfilter & " AND 送信可否 = " & True
        Else
            varfilter = varfilter & " AND 送信可否 = " & False
        End If
    End If
    
    Me.Filter = varfilter ' --- D
    Me.FilterOn = True ' --- E

End Sub
解説
  • Filterの条件式は、Where句からWhereをカットとした形式になります。
  1. If Not IsNull( *** ) Then 〜 : ***がNull値でなければ〜以下を実行します。検索フィールドに何も条件が入力されていない状態であれば 無視 するようにしています。
  2. LIKE演算子を用いて あいまい検索 を行います。このメールアドレスの検索はプロシージャ内で最初に実行されます。2番目に実行されるのは、登録IDになります。Filterの条件式が複数存在する場合は、ANDで繋ぎます。2番目の登録IDの検索式は、varfilter = varfilter & " AND 登録ID = " & varID と、ANDが最初から組み込まれていますので、メールアドレスが空白の場合でも、メールアドレス LIKE '*' と条件式を存在させています。
  3. コンボボックスで「可能」「不可」をユーザーが選択することができます。メール送信が可能な登録者なら「可能」を選択する訳です。
    このフィールドのデータ型は、Yes/No型です。このデータ型をコンボボックスで抽出する場合、若干注意が必要になります。つまり、「可能」をユーザーが選択した場合、Filterの抽出条件にそのまま引き渡すのではなく、「可能」をTrueに変更する必要があります。そのため、If構文で分岐させています。
  4. Filterプロパティに、変数varfilterを代入しています。
  5. FilterOnプロパティにTrueを代入し実行します。
フィルターの解除

コマンドボタン(cmb_クリア)のクリック時イベントプロシージャを以下のように作成します。このプロシージャはFilterを解除しデータを全件表示させます。

Private Sub cmd_クリア_Click()

    Me.Filter = "" ' --- A
    Me.FilterOn = True
    
End Sub
解説
  1. Filterプロパティに無データ("")を代入します。これでFilterが解除されます。

フォームビュー

以下のようになります。

 

ページの先頭へ 前ページへ戻る


検索フォームの作成:Mail管理ソフト15


-Microsoft Access Club-

動画配信(ダウンロード、ストリーミング)対応の専用レンタルサーバー。データセンター設置場所はアメリカ合衆国です。: 動画サーバードットコム
動画配信(ダウンロード、ストリーミング)対応の専用レンタルサーバー。
データセンター設置場所はアメリカ合衆国です。
100Mbps〜1Gbpsまで対応できます。