• 締切済み

抽出クエリの表示方法

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 クエリ式が間違っているのは分かるのですが、ここからどう修正させていけばいいのかわかりません。 ご教示のほど、よろしくお願いします。

みんなの回答

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.3

テーブルの 「所持免許資格」 は スペースで区切られた複数の資格名が入力されている、といことでしょうか? 少々問題がありますが、(※) 一応、これでできます。 ----------------- 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)
回答No.2

なぜ、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)
回答No.1

アクセスのマクロはよく知らないけど、SQL文なら&でなくて、ANDをつかうんじゃない?

関連するQ&A

  • ACCESSでクエリーを使った検索

    VBAを使えば簡単にできるのですが、事情があり、クエリーのみで行わなければいけません。 フォームに入力された情報を元に検索できるクエリを作成しました。 通常でしたらクエリのフィールド名の下の抽出条件に Forms![F_検索]![検索条件1] とすればいいのですが、これが複数の条件を設定した場合はすべての条件を入力しないと、検索結果が出ないことから 以下のように変更しました。 フィールド名の抽出条件には何も書かず、別に式として IIf(IsNull(Forms![F_検索]![検索条件1],True,[フィールド1]=[Forms!]![F_検索]![検索条件1])) と入力しそこの抽出条件に「True」と入力しました。 これで何も入力されてない場合は全件が表示されるようになりました。 通常の検索はこれでいいのですが疑問点が2点あります。 1.期間を抽出する場合はどうしたらいいのか? IIf(IsNull(Forms![F_検索]![検索条件1],True,[フィールド1]=Between [Forms!]![F_検索]![検索条件1] and [Forms!]![F_検索]![検索条件2])) とかしてみましたがダメでした。 2.あいまい検索をするにはどうしたらいいのか? IIf(IsNull(Forms![F_検索]![検索条件1],True,[フィールド1]=Like [Forms!]![F_検索]![検索条件1])) なんてしてみましたがだめでした。 ご回答よろしくお願いします。

  • ACCESSのクエリの抽出

    ACCESS2003を使っています。フォームのコンボボックスに入っているデータを見てクエリで抽出したいと思っています。 フォームのコンボボックスにデータが入っているときは、そのデータで抽出を行い、nullのときは抽出をやめてすべてのデータを表示させたいです。 抽出項目には、null値はありません。 クエリの抽出欄に下記の式を入れましたがうまくいきません。 IIf(IsNull([Forms]![フォーム名]![コンボボックス名])=true , Is Not Null , [Forms]![フォーム名]![コンボボックス名]) コンボボックスにデータが入っている場合は、抽出はうまくいくのですが、nullのときは、何も表示されません。 どこか式が違っているのでしょうか? よろしくお願いします。

  • Access2000 抽出について

    どうしてもわからないので教えてください。 選択クエリで、「フリガナ」というフィールドに、 Like IIf(IsNull([Forms]![F_顧客検索]![カナ検索]),"*",[Forms]![F_顧客検索]![カナ検索] & "*") でフォームからクエリを実行させるようにしているのですが、 フリガナが空白のレコードは抽出されてくれません。 「*」でなく、なんと入れればいいのでしょうか? ちなみに他に、「自宅電話番号」というフィールドに、 Like IIf(IsNull([Forms]![F_顧客検索]![電話検索]),"*" & "*",[Forms]![F_顧客検索]![電話検索] & "*") など、似たような感じで抽出をかけています。 よろしくお願いします。

  • ACCESSでのクエリ抽出条件について

    ACCESS超初心者です。 自分なりに調べたのですが、知識不足によりお手上げ状態です。 クエリの抽出条件について、どなたかご教授いただけますでしょうか? OS:XP ACCESS:2000 ・フォーム上に自由に入力できるテキストを3つ用意します。 ・入力された3つのテキストが1つのフィールドに含まれるものをクエリで抽出したい。 ・3つのテキストが空欄の場合は全てのデータを抽出したい。 ■フォーム上のテキスト  テキスト1:テキスト10  テキスト2:テスト11  テキスト3:テスト12 ■テーブル  フィールド1:問合せ内容(1) ■クエリ内の抽出条件 Like "*" & [Forms]![F_検索テスト]![テキスト10] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト11] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト12] & "*" テキスト名がおかしいのですが、ご了承下さい。

  • クエリの抽出条件

    クエリの抽出条件を手入力では無く、コンボボックス方式で プルダウンでリストを選びたいと思い下記の抽出条件を入力 [Forms]![フォーム名]![コンボ名] しかし、パラメータ入力時の名前が、Forms!フォーム名!コンボ名と変わるのみで プルダウンになりません クエリを過去のデータ検索のみで使用したいと思ってます。 ネットをくぐると、メインフォームを開いてとありますが、それでも駄目です。 また、クエリー検索だけで、メインフォームを開かないでプルダウン方式には 出来ないものでしょうか よろしくお願い致します

  • アクセスクエリでの空白の値の表示

    フォームで条件フィールドから2つ同時の検索をかけたく クエリに以下の式を記載致しました。 検索はかかるのですが空白のデータがでてきません。 空白のデーターも表示させたいためにはどうしたらいいでしょうか? 式1: IIf(IsNull([Forms]![フォーム]![条件1]) And IsNull([Forms]![フォーム]![条件2]),True,[条件]=[Forms]![フォーム]![条件1]Or [条件]=[Forms]![フォーム]![条件2] 抽出条件  True

  • クエリーの抽出について

    今回初めて質問させていただきます。 所持しているゲームソフトが増えてきたので、ACCESSで管理したいと思いました。 テーブル、追加クエリー等は作成したのですが、フォーム上でメーカー名と頭文字という二つのテキストボックスを作成し、クエリーにて FORM!検索フォーム!テキストボックスという感じで作成し、抽出をしようとしたところ、両方のテキストボックスに検索条件を入力しないと抽出されないことに気づきました。 これを、一つの検索条件を入力した時にも抽出できるようにできませんか?説明がわかりにくいかもしれませんが、よろしくお願いします。

  • access データの抽出について

    フォームのヘッダーに、非連結のテキストボックスを数個置いてフィルターの抽出を使って、検索をかける仕組みを作りました。 クライアント名を入れると、クライント名で抽出でき、発生日時初め~発生日時で検索をかけると、発生日時事に検索をかけれるという仕組みです。 テーブルはメインtという一つのテーブルでまとめてあります。 フィルター用のクエリを作りこのように作りました。 SELECT メインt.メインid, メインt.クライアント名, メインt.発生日時, メインt.次回アクション日, メインt.発生部位id, メインt.原因分類id FROM メインt WHERE (((メインt.クライアント名) Like [Forms]![未対応状況f]![条件1] & "*")) OR (((メインt.発生日時) Between [Forms]![未対応状況f]![発生日時1] And [Forms]![未対応状況f]![発生日時2]));これをフィルターの実行マクロで抽出をかけ、再クエリをマクロで登録しているのですがクライアント名で検索をかけると上手くデータをひっぱってくるのですが、発生日時を入れるとすべてのデータを引っ張ってきてしまいます。また、クライント名を入れて、発生日時を入れると、該当のクライアント名のデータと一緒に発生日時で指定した日時のデータも一緒に引っ張ってきてしまいます。(該当クライントデータの発生は4月なのに、発生日時検索の期間を例えば5月に指定すると、該当クライントデータかつ5月分のデータも引っ張ってきます。どのように変更すればよろしいでしょうか。お教え願います。

  • フォームからクエリの抽出期間を指定するにあたって

    フォームのテキストボックス(開始日付,終了日付)に入力された期間内の レコードをクエリで抽出するために、以下のような抽出条件を設定しています。 Between [Forms]![フォーム1]![from date] And [Forms]![フォーム1]![終了日付] ここまでは問題なく出来ています。 ですが、例えばテキストボックスに何も入力していないときに、 全ての期間から全件表示させるような方法はありませんでしょうか? IIf(IsNull([Forms]![フォーム1]![開始日付]),True,~ というような形で、IIfとIsNullの組み合わせも考えたのですが、 日付は直接フィールドでは無く抽出条件のため、 Trueより後が設定できずに悩んでおります。 出来ればVBAは使いたくないのですが、 何か良い方法はありませんでしょうか?

  • Formからの複数選択抽出条件に応じたQueryのコーディングについて

    MainForm F-Main上にCombo Box a-1 とa-2 があります。 その場合 a-2 は a-1 を選択後絞込まれた内容のデータが表示されています。 A-1 及び a-2 の内容に応じてレコードを抽出したいのですが、 その場合Queryのグリッド内抽出条件として、下記の場合についてそれぞれのケース全てを満たすコード表示方法を教えて頂きたいと思います。 1) 全てのレコードの抽出:Queryの(Formのa-1 a-2に)該当するFieldに何も条件式を書かない内容と同じ結果を得る事。 2) a-1 のみを指定して、a-2は指定しない場合のレコードの抽出。(即ち、a-2の選択有無に拘わらずa-1に合致する全てのレコードの抽出) Queryのa-1該当Fieldに Forms![F-Main]![a-1]を記入した場合、a-2該当Field にIs Null Or Forms![F-Main]![a-2]を記入しても上手くNull値を拾ってくれません。 3) a-1 又はa-2のそれぞれの該当フィールドにデータが無い場合、そのデータの無いレコードも指定された抽出条件のレコードと合わせて抽出する。 4) 単純に a-1 も a-2 も指定されたレコードは、QueryのそれぞれのグリッドField部分にForms![F-Main]![a-1] とForms![F-Main]![a-2]によって上手く抽出できます。 4)と同時に上記の1)2)3)のケースも合わせて満足するコーディングを宜しくご指導下さい。