複数条件の抽出フォームの設計その1を参考に検索フォームを作りました。
氏名検索のところで、漢字でもフリガナ入力でも検索できるようにと思い、フィールドを Orで繋げました。
氏名検索は漢字入力でもフリガナ入力でも検索できるようになったのですが、その他の検索項目を選択すると、動作したり、しなかったりします。
どの部分に不具合が出ているのか、教えて頂きたくよろしくお願いいたします。
フィールド名 | データ型 | 抽出仕様 |
---|---|---|
氏名 | テキスト型 | 部分一致 |
フリガナ | テキスト型 | 部分一致 |
参加有無 | Yes/No型 | Yes/No |
性別 等々 | テキスト型 | 部分一致 |
就職年月日 | 日付/時刻型 | 2つのテキストボックスで範囲指定 |
Private Sub 抽出_Click()
Dim strfilter As String, strexp As String, aryope As Variant
If Not IsNull(Me.氏名検索) Then
strfilter = strfilter & " AND 氏名 Like ""*" & Me.氏名検索 & "*"" Orフリガナ Like ""*" & Me.氏名検索 & "*"""
End If
If Me.参加 = True Then
strfilter = strfilter & " AND 参加有無 =" & Me.参加
End If
If Not IsNull(Me.性別検索) Then
strfilter = strfilter & " AND 性別 Like '*" & Me.性別検索 & "*'"
End If
********************************
途中に同じ設定で検索項目を6つ設定しています
********************************
If Not IsNull(Me.産業検索) Then
strfilter = strfilter & " AND 産業分類 Like '*" & Me.産業検索 & "*'"
End If
If Not IsNull(Me.職業検索) Then
strfilter = strfilter & " AND 職業分類 Like '*" & Me.職業検索 & "*'"
End If
If Not IsNull(Me.min就職日) Then
If Me.min就職日 > Format(Date, "yy/mm") Then
strfilter = strfilter & " AND 就職年月日 >= #" & "19" & Nz(Me.min就職日) & "#"
Else
strfilter = strfilter & " AND 就職年月日>= #" & "20" & Nz(Me.min就職日) & "#"
End If
End If
If Not IsNull(Me.max就職日) Then
If Me.max就職日 > Format(Date, "yy/mm") Then
strfilter = strfilter & " AND 就職年月日 < #" & DateAdd("m", 1, "19" & Me.max就職日) & "#"
Else
strfilter = strfilter & " AND 就職年月日 < #" & DateAdd("m", 1, "20" & Me.max就職日) & "#"
End If
End If
Me.Filter = Mid(strfilter, 6)
If strfilter = "" Then
Me.FilterOn = False
Else
Me.FilterOn = True
End If
End Sub
ちょっと眺めただけですが
strfilter = strfilter & " AND 参加有無 Like '*" & Me.参加 & "*'"
参加有無がYes/No型ならばLikeで比較するべきではありませんし、右辺が文字列型になっているので抽出できることはまずないでしょう。(これを見た時点でほかの条件生成文は見ていません)
strfilter
をMe.FilterOn = True
の直前でウォッチウィンドウで確認するとかDebug.print
でイミディエイトウィンドウで確認してみるとおかしなところがわかると思います。お返事ありがとうございます。
すみません、確認すると実際には
strfilter = strfilter & " AND 参加有無 =" & Me.参加
と、記述していました。
質問は後からでも編集できるので、質問のコードを実際のものに修正してください。
あと、確認ですか、
Me.参加
はチェックボックスでしょうか。チェックボックスとして、チェックが入っているときは、「参加有無」フィールドがTrueを抽出するのだと思いますか、チェックが入ってないときはどうしたいのでしょうか。
お返事ありがとうございます。
質問は編集できたのですね。申し訳ありません。
Me.参加 はチェックボックスです。
データ登録画面で、参加する しない を チェックボックスで選択してもらい、
検索画面で、チェックが入ったデータのみを抽出しようと思いましたので、
チェックが入っていないものは抽出しない、程度にしか考えていませんでした。
具体的に上げてください。
「何をどうしたらこうなってほしい」のだけれど「何をどうしたらどうなった」というのがなければ書いたとおりに動いているだろうとしか言えません。
エラーが出てコードが途中で止まるという話ではないですよね?
申し訳ありません。
Me.氏名検索 のところで、フリガナ を入力して性別検索であったり 産業検索等の項目をいくつか選択し
抽出をかけると、絞り込みが出来るのですが、
Me.氏名検索 に 漢字で氏名 を入力して同じように項目をいくつか選択し
抽出をかけると、漢字(氏名)のみの絞り込みしか出来ず、その他のいくつか選択した項目の絞り込みが出来ません。
氏名検索のところを
↓
でどうでしょう?
ありがとうございます。
早速試しに アオキ で検索しようとした所、
実行時エラー‘3075
クエリ式’(氏名 Like “アオキ” Orフリガナ Like”アオキ”)’の構文エラー:演算子がありません。
と、表示され、下記部分が 黄色に反転しています。
Me.Filter = Mid(strfilter, 6)
申し訳ありません、ほぼ見よう見まねですので、どうしよう・・・という感じになっています。
Or
とフリガナ
の間に半角空白が必要です。提示されている式をそのままコピーして使っているだけなんですが不思議ですね。
(ちなみに自分のところでは元のコードからエラーになります)
hatena様 hiroton様
本日、試したところ無事思うように動きました。
大変勉強になりました。
ありがとうございました。😊
無事に行ったようでなによりです。
せっかくなので軽く解説を置いておきます。
演算子には優先順位があります。
3 + 3 * 3 = 12 '・・・18ではない(乗算が優先される)
といったようなものです。
ACCESS(SQL)の
AND
とOR
にも優先順位がありAND
が優先されます。例えば元コードで男性の伊藤さんを探そうとなった場合、漢字指定だと
氏名='伊藤' OR フリガナ='伊藤' AND 性別='*男*'
は
氏名='伊藤' OR (フリガナ='伊藤' AND 性別='*男*')
と同じとなります。その他の検索項目はフリガナで抽出できた場合にしか影響しないということですね。
提示した修正はこれを
(氏名='伊藤' OR フリガナ='伊藤') AND 性別='*男*'
となるようにするものです。
くわしく解説いただきまして、ありがとうございます。
意味も理解できずに使用していまして、全くダメですね。
この掲示板をもっと活用させて頂いて、勉強していきます。
ありがとうございました。😄
いつも大変お世話になっております。
漢字フリガナ検索も無事思うように動作するようになり、大変助かっております。
追加の質問をさせて頂きたく、送信いたしました。
検索結果データがない場合、
メッセージボックスで「検索データはありません」等の表示をさせる方法はないでしょうか?
どうぞよろしくお願いいたします。
早々にご返事いただきまして
ありがとうございます。
少しづつ思うような検索フォームに近づいていて
益々勉強しなければ!と思うこの頃です。
本当にありがとうございます。
勉強中と言うばかりで、頼ってばかりで申し訳ありません。
メッセージも表示でき、何とかかたちになった来ました。
厚かましくも、度々の追加質問をさせて頂きたく、再度送信いたしました。
検索項目の追加を考え、月検索(数値型)をリストボックスで作って、複数選択を可能にしたいと、【複数選択リストボックスで選択したレコードの印刷】をもとに色々試したのですが、リストボックスの複数選択で絞り込みが出来ません。
リストボックスでの複数選択した項目を 複数条件の抽出フォームで使用することは出来ないのでしょうか。
これをリストボックスの複数選択にしたいと思っているのですが・・・・・。
よろしくお願いいたします。
当初の質問とは内容が異なってきていますので、
新規に質問を立ててください。
申し訳ありません。
新規で質問をさせて頂きます。