クエリ 抽出条件にしたコントロールに入力が無かった場合 [クエリ]
抽出条件無しと言うことで、全件表示にしたいんだけど、普通に作ると何も抽出されません。
フォーム コンボボックスで選択された内容でサブフォームの内容を絞り込む
で、作成したフォームも、このような動作になります。
データ一覧のクエリは以下の通り。
抽出条件にコンボボックスを指定しています。
この方法だと、コンボボックスが空の場合、
このように何も抽出されません。
抽出条件が成り立たないので、当然の結果なのですが、コンボボックスで何も指定しなかったら抽出条件無しと言うことで、全件表示されて欲しい場合もあると思います。
ならばそう言う条件式を書けば良いだろう、と言うことで、ちょっとやってみました。
クエリデザインの画面ではやりにくいので、SQL文のWHERE句を直接書きます。
クエリをSQL画面に切り替えると、このようなSQLが表示されます。
さて、SQL文の条件と言っても、評価した結果がTrueかFalseか、と言う点は、VBのそれと変わりません。
「AAA=BBB」と言う形にこだわる必要はありません。
Trueだったらそのレコードは表示される、Falseだったら表示されない、それだけです。
で、そう言う結果を返す式をでっち上げます。
IIf(IsNull([Forms]![F都道府県コンボ]![CHIHOCD])=True,
True,
[TMTDFK].[CHIHOCD]=[Forms]![F都道府県コンボ]![CHIHOCD])
こんな感じでWHERE条件を書きます。
結果はこのとおり。
抽出条件のコントロールが空欄の場合、全レコードが表示されました。
ただ、SQL文を書いた後、クエリデザインの画面を表示させると、クエリデザインの画面にSQL文を再現させるためか、条件式が少々変わってしまいます。
動作は変わらないですが。
この方法、やっておいて何ですが、やっぱりちょっと無理矢理です。
たぶん、このSQL文だと、全レコードを評価しないと結果が出せないので、レコード件数が多くなるとパフォーマンスが悪くなると思います。
本来、条件無しなら、Where句を書かないのが正しいのです。
私的には、VBAでレコードソースのSQLを書き換えるのが良いと思います。
参考はこちら。
・データ一覧フォーム その3 データ絞込
コメント 0