Access初心者です。
下記のようなテーブルがあった場合に、
テキストボックス(カンマ区切りで複数可)から指定された社員IDのレコードを表示させようと思っています。
ただし、テキストボックスに何も入力されなかった場合は「検索の指定無し」として、
レコードを全件表示させたいです。
[テーブル1]
(社員ID) (社員名)
000001 社長
000002 副社長
000003 部長
000004 課長
000005 主任
000006 平社員1
000007 平社員2
000008 アルバイト
簡単に実現可能な方法があるとは思うのですが、
クエリのフィールドに指定する方法で実現させたいです。
自分なりに調べてみて、フィールドには以下を設定しました。
Eval(BuildCriteria("'" & [テーブル1]![社員ID] & "'",10,"*" & Replace([ID検索],",","* Or *") & "*"))
※抽出条件は「-1」です。
この条件で、テキストボックス[ID検索]に「000002,000004,000008」のように入力すると、
思い通り3件のレコード{副社長/課長/アルバイト}を表示することができました。
ただ、何も入力しなかった場合は画像のようなエラーダイアログが表示されてしまいます。
そこで、テキストボックスがNullかどうか判定を追加してみようと思い、
以下のように変更してみましたが同じエラーダイアログが表示されてしまいました。
IIf(IsNull([ID検索]),True,IIf(Eval(BuildCriteria("'" & [テーブル1]![社員ID] & "'",10,"*" & Replace([ID検索],",","* Or *") & "*")),True,False))
※抽出条件は「<>False」です。
Accessの経験値が少なく、ネットでも対処方法が見つけられず行き詰まってしまいました。
この条件のどこをどのように直せば未入力時の全件表示が可能でしょうか?
よろしくお願いいたします。
IIf(IsNull([ID検索]),[テーブル1]![社員名],Eval(BuildCriteria("'" & [テーブル1]![社員ID] & "'",10,"" & Replace([ID検索],","," Or ") & "")))
でどうでしょうか。
条件式ちゃんと見てないのであってるか微妙ですが。
Replace 関数
Replace([ID検索],",","* Or *")
の部分で[ID検索]
が未入力(Null)ならエラーが発生します。複雑な計算式でエラーが出た場合は、式を分解して内容を確かめる等、原因の究明をしましょう
例えば、抽出用のフィールドを作らず、単に
Replace([ID検索],",","* Or *")
だけのフィールドを作成しますこれだけのクエリでも質問のようなテストを実行すれば同じエラーが表示されるはずです
ゲッキョク駐車場様、ありがとうございます!
テキストボックスに何も入力されなかった(NULLの)場合は対象をそのまま表示させればいいということですね。
思いつきもせず目からウロコです!
ただ、、、ご教授いただいた方法でも同じエラーダイアログが表示されてしまいました。
どこか根本的な見落としでもあるのでしょうか・・・。
hirotonさんのが圧倒的に強いので、出しゃばりたくはないのですが、
Null出ちゃう時にとりあえず使うイメージのある「Nz」を使ってみては。
Nzの使い方とかは調べるとたくさん出てきます。
>hiroton様
ある程度で式を分解して確認する、肝に銘じておきます。
>ゲッキョク駐車場様
Nz関数を使って、以下のようにすることで無事解決することができました。
Eval(BuildCriteria("'" & [テーブル1]![社員ID] & "'",10,"*" & Replace(Nz([ID検索]),",","* Or *") & "*"))
どういった関数があるのか、あったとしてそれをどう見つけ当てるかが大事ですね。
色々と経験値を溜めて行ければと思います。
hiroton様、ゲッキョク駐車場様、貴重な情報ありがとうございました!
解決済みですが、下記のような方法もあります。ご参考までに。
式1: "," & Nz([ID検索],[社員ID]) & ","
Like "*," & [社員ID] & ",*"
hatena様、新たな情報ありがとうございます。
実現方法も様々あるようで、場面によって適した方法が使えるように励みたいと思います。
改めましてありがとうございました。