アクセス検索用フォームでの完全一致検索
いつも大変お世話になっております。ACCESS初心者ですが,宜しくお願いします。
テーブルAを元にクエリAを作成し,クエリAをレコードソースとしてフォームAを作成しています。フォームAのレコードを検索するのに検索用フォームBを作成しました。検索用フォームBは,フォームAと全く同じデザインで,レコードソースのみ空にしてあります。項目は,氏名,住所,金額,契約締結日,業種分類等20個ほどあり,それぞれ検索するために20個分の非連結のテキストボックスを配置しています。また,検索条件を表示させるためのコマンドボタンを一つ配置しています。コマンドボタンには,以下のVBAを記述しています。
Private Sub 検索実行_Click()
On Error GoTo エラー処理
Dim StrWhr As String 'Where条件式
Dim StrMsg As String '表示メッセージ
Dim StrSrc As String 'レコードソース
Dim stDocName As String '表示用フォームの名前
If Nz(Me!氏名, "") <> "" Then
StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "氏名 Like '*" & Me!氏名 & "*'"
End If
If Nz(Me!住所, "") <> "" Then
StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "所在地 Like '*" & Me!所在地 & "*'"
End If
If Nz(Me!金額, "") <> "" Then
StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "金額 = " & Me!金額
End If
If Nz(Me!契約締結日, "") <> "" Then
StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "契約締結日 Like '*" & Me!契約締結日 & "*'"
End If
If Nz(Me!業種分類, "") <> "" Then
StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "業種分類 = " & Me!業種分類
End If
If StrWhr = "" Then
StrSrc = "Select * From [qry_○○] Order By ○○;"
Else
StrSrc = "Select * From [qry_○○] Where " & StrWhr & " Order By ○○;"
End If
If MsgBox(StrMsg, vbOKCancel, "確認") = vbOK Then
DoCmd.OpenForm "frm_○○", , , StrWhr
Forms("frm_○○").RecordSource = StrSrc
End If
終了処理:
Exit Sub
エラー処理:
MsgBox Err & Error$, , Me.Name & " 検索実行"
Resume 終了処理
End Sub
このうち,氏名,住所,金額に関しては,問題なく検索できますが,契約締結日及び業種分類について検索することができません。
(1)契約締結日に関しては,契約締結日その日のみではなく,指定した契約締結日以前のレコード全てや,期間を指定してレコードを抽出したいのですが,可能でしょうか。
例えば,契約締結日のテキストボックスに
>2008.8.1と入力した場合に,2008.8.1以前に契約を締結した全部のレコードを抽出したり,
2008と入力した場合に,2008(年)に契約締結した全レコードを抽出できることが希望です。
(2)業種分類については,コンボボックスからデータを選択して検索するようになっていますが,検索実行をクリックすると,パラメーターの入力画面が表示され,適当な値を入力しても正しい抽出結果が表示されません。
おそらく,以前に教えていただいた
StrWhr = IIf(StrWhr = "", "", StrWhr & " And ") & "○○ = " & Me!○○
の構文が数値型の完全一致検索の構文のためだと思われます。テキスト型の完全一致検索の構文を教えて下さい。
拙い質問で恐縮ですが,補足等いたしますので,宜しくお願いいたします。
お礼
回答ありがとうございます。 無事抽出できました。 ありがとうございました。