Microsoft Access 掲示板

複数の検索ボックス

7 コメント
views
4 フォロー

検索用のコンボボックスが3つあります。cmb1,cmb2,cmb3
これらがnullでない場合は、これでフィルターをするクエリを作りたいです。

例えば、

cmb1cmb2cmb3
東京都男性未婚 
東京都nullnull 
nullnullnull 

①の時は、東京都かつ男性かつ未婚の三条件すべてでのフィルター
②の時は、東京都だけ
③の時は、フィルターなしの全データ

ということがやりたいのですが、
クエリのデザインビューを使ってどのように記載すればよいのでしょうか。

nokonoko
作成: 2022/09/01 (木) 13:57:17
通報 ...
1
nokonoko 2022/09/01 (木) 15:04:14 e1bac@54883

自己解決したみたいです。

Like iif([forms]![form名]![cmb1] is null , '*', [forms]![form名]![cmb1])

系を使えばよいのですね。

2

③の時は、フィルターなしの全データ

like iif([forms]![form名]![cmb1] is null , '*', [forms]![form名]![cmb1])

これだと、Null値のレコードは抽出されません。
テーブルに Nullのレコードがなければいいですが。

3
nokonoko 2022/09/05 (月) 11:32:22 e1bac@54883

ご回答ありがとうございます。
ご指摘の件、確認して理解いたしました。

データにNull値がないようにするセーフティーネットはつけていなかったので、
Nullのデータがある場合には検索ができなくなりますね。
対処法はあるのでしょうか。

4
hatena 2022/09/05 (月) 13:08:58 修正

下記のようにフィールド欄に式を設定して、抽出条件をTrueにしたらどうでしょう。

フィールド IIf([Forms]![Form名]![cmb1] is null , True, [forms]![form名]![cmb1]=[フィールド名])
抽出条件: TRUE

他のフィールドも同様に設定してください。

5

前回の回答だと、インデックスが無効になるので、データ数が多いと重くなる場合があります。その場合は、下記のようにしてください。

SQLビューで下記のように記述します。

SELECT テーブル名.*
FROM テーブル名
WHERE
 ([都道府県]=[Forms]![Form名]![cmb1] Or [Forms]![Form名]![cmb1] Is Null)
 And ([性別]=[Forms]![Form名]![cmb2] Or [Forms]![Form名]![cmb2] Is Null)
 And ([既婚/未婚]=[Forms]![Form名]![cmb3] Or [Forms]![Form名]![cmb3] Is Null);

テーブル名、フィールド名は実際のものに変更してください。

保存するときは、SQLビューのまま保存してください。デザインビューにすると、複雑に書き換えられてしまうので、デザインビューにして保存しないようにしてください。

6
nokonoko 2022/09/05 (月) 13:31:20 e1bac@54883

ご提案ありがとうございます。
ちょっと、うまくいきませんでした。

この部分は、Nullにならないように、入力時にチェック機能をつけて、対応したいと思います
ありがとうございました。

7

テキスト型のフィールドならば、
テーブルのデザインビューで、フィールドのプロパティを下記のように設定すると、
未入力は Null ではなく ""(空文字列)になります。

値要求 はい
空文字列の許可 はい

入力済みのフィールドは変わらないので、更新クエリか、置換で
Nullを""に更新します。

これで、質問の式か、下記の式でOKになります。

Like Nz([Forms]![Form名]![cmb1], '*')