- 締切済み
抽出クエリの表示方法
Access2007を使用して検索フォームを組んでいます。 テーブル名「T_社員」 項目名「氏名」「所持免許資格」 フォーム名「F_抽出」 項目名「検索資格1」「検索資格2」「検索資格3」(いずれも非連結項目) 【実行したい事】 T_社員の部署名の値が、フォーム「F_抽出」の「検索資格1」「検索資格2」「検索資格3」のいずれかに該当すれば表示し、3項目すべてがNullの場合、全件表示という形にするため、そのクエリ作成で悩んでいます。 【例】 「検索資格1」の値=「自動車免許」 「検索資格2」=「英検2級」「検索資格3」=Null 「T_社員」の「所持免許資格」欄に「自動車免許」または「英検2級」のどちらかに該当していたら表示する。 上の場合、「所持免許資格」の内容が 「自動車免許 英検3級」・・・ 一部に該当するため抽出 「英検3級 簿記2級」・・・ いずれも該当しないため抽出しない という様にしたいのです。 【表示するクエリ】 フィールド名:IIf(IsNull([検索資格1]) and IsNull([検索資格2]) and IsNull([検索資格3]) ,true, [T_社員].[所持免許資格] Like "*[" & [Forms]![F_抽出]![検索資格1] & [Forms]![F_抽出]![検索資格2] & [Forms]![F_抽出]![検索資格3 ] & "]*") 抽出条件:true クエリ式が間違っているのは分かるのですが、ここからどう修正させていけばいいのかわかりません。 ご教示のほど、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- m3_maki
- ベストアンサー率64% (296/460)
テーブルの 「所持免許資格」 は スペースで区切られた複数の資格名が入力されている、といことでしょうか? 少々問題がありますが、(※) 一応、これでできます。 ----------------- SELECT T_社員.* FROM T_社員 WHERE ( (所持免許資格 Like "*" & Trim([Forms]![F_抽出]![検索資格1]) & "*") AND (Trim(Nz([Forms]![F_抽出]![検索資格1],""))<>"") ) OR ( (所持免許資格 Like "*" & Trim([Forms]![F_抽出]![検索資格2]) & "*") AND (Trim(Nz([Forms]![F_抽出]![検索資格2],""))<>"") ) OR ( (所持免許資格 Like "*" & Trim([Forms]![F_抽出]![検索資格3]) & "*") AND (Trim(Nz([Forms]![F_抽出]![検索資格3],""))<>"") ) OR ( (Trim(Nz([Forms]![F_抽出]![検索資格1],""))="") AND (Trim(Nz([Forms]![F_抽出]![検索資格2],""))="") AND (Trim(Nz([Forms]![F_抽出]![検索資格3],""))="") ) ----------------- フォームのコントロール名の数字を半角にしてあります。(全角数字のオブジェクト名はトラブルの元なので) フォームとSQL の間で矛盾がないよう統一してください。 ※ 例えば、「看護師」 で抽出すると「准看護師」 も ヒットします。 これでまずければ、「所持免許資格」の両端にスペースを付加したものに対して検索するように修正してください。 個人的には、条件が複雑な場合、 抽出の結果をフォームに表示するのなら VBA でフィルタを操作する方が簡単かと思います。
- nora1962
- ベストアンサー率60% (431/717)
なぜ、Iif関数を使うのかよくわかりません。 すなおにWhere条件に書けば where ( [検索資格1] is Null and IsNull([検索資格2] is Null and [検索資格3] is Null) Or [T_社員].[所持免許資格] Like "*" & [Forms]![F_抽出]![検索資格1] & "*" Or [T_社員].[所持免許資格] Like "*" & [Forms]![F_抽出]![検索資格2] & "*" Or [T_社員].[所持免許資格] Like "*" & [Forms]![F_抽出]![検索資格3] & "*" 提示されている条件では、フォームの項目を単純につなげてしまっているのと、"*["、"]*"のブラケットが悪さしている。 上記ではLikeにしているけど、あいまい検索の必要がなければ where ( [検索資格1] is Null and IsNull([検索資格2] is Null and [検索資格3] is Null) Or [T_社員].[所持免許資格] = [Forms]![F_抽出]![検索資格1] Or [T_社員].[所持免許資格] = [Forms]![F_抽出]![検索資格2] Or [T_社員].[所持免許資格] = [Forms]![F_抽出]![検索資格3] でいい気もします。
- hornet3
- ベストアンサー率19% (12/62)
アクセスのマクロはよく知らないけど、SQL文なら&でなくて、ANDをつかうんじゃない?