• ベストアンサー

Accessのクエリの検索条件にフォームのテキストボックスを指定したんですが…

WinXPのAccess2002です。 クエリの検索条件には、[]カッコを用いてフォーム上のテキストボックスを指定できますが、 Nullじゃないものを検索しようと、is not nullと 入力して、試験的にクエリを起動させたところ、 「式が複雑なので…」というメッセージが帰ってきました。 ですが、そのテキストボックスに値を直接指定(数字を入力 するフィールドなんですが、039とか555とか)すると、エラーも 起きずにクエリは実行してくれます。 "is not null"などの場合は、特別な指定の仕方があるのでしょうか。 どうぞご教示のほどよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

試しにクエリのデザインビューで、検索条件に  1)Test  2)[Test]  3)Null をそれぞれ指定した上で、メニューの「表示(V)」→「SQLビュー(Q)」をクリックしてみて下さい。 すると、「1)」と「2)」では、フィールド名と条件は「=」で繋がれていますが、「3)」では「=」がないことがわかります。 つまり、「Forms![フォーム名]![コントロール名]」(→「2)」と同じパターン)の形で指定した場合、フォームのテキストボックスに「Is Not Null」を入力すると、「=Is Not Null」としてクエリを実行しようとするため、ご質問のようなエラーになります。 (一方、数字の場合は、元々「=」で繋がれているので、問題は起きない、と) ですので、「Is Null」「Is Not Null」を検索したいのでしたら、特別な対応が必要になります。 私の場合は、「通常の検索用」と「Null絡みの検索用」の2つのクエリを予め用意しておいて、  1)「空欄のものを検索」チェックボックスを設置し、そこにチェックが入れられたか判定  2)テキストボックスに「Null」というテキストがあるかどうか判定 のどちらかのマクロを設置して、その結果でクエリを使い分ける(→フォームであれば、そのレコードソースにそのクエリ名を代入)、といったことをやっています。 もうひとつの方法としては、クエリではなく、マクロやVBAで「フィルタの実行(ApplyFilter)」を行うという手もあります。 ・・・以上、私は独学なので、セオリーを外しているかもしれませんが、参考になれば幸いです。

sinewaves
質問者

お礼

大変遅くなりましたが、ご返信ありがとうございました。 2つのクエリを用意するという手は想定外でしたので、 トライしてみようと思っております。 どうもありがとうございました。

関連するQ&A