• ベストアンサー

【Access】条件未入力時、全件ヒットするクエリについて

下記のテーブルがある場合、下記のクエリを実行すると、下記のような結果になります。 条件1. [Forms]![F_Form]![name]に「ル」と入力 →「ベルト」のレコードを抽出 条件2. [Forms]![F_Form]![name]に何も入力しない。 →「ベルト」「ニット」「ズボン」のレコードを抽出 【クエリ】 SELECT * FROM TBL WHERE (((TBL.NAME) Like IIf(Nz([Forms]![F_Form]![name])='','*','*'+Nz([Forms]![F_Form]![name])+'*'))); 【テーブル(TBL)の中身】 ID NAME 1 ベルト 2 ニット 3  4 ズボン 条件1は意図した動作となっていますが、 条件2は意図した動作をしませんでした。 条件2の場合、全件ヒットしたいと思います。 ただ、上記のクエリではNAME列に値が入っていないID=3の値が抽出できませんでした。 その為、条件2の場合、全件ヒットするクエリの書き方をご存知の方がいらっしゃいましたら、 ご教示いただければと思います。 よろしくお願いします。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

【テーブル(TBL)の中身】のID=3のとき、TBL.NAMEがNullなのでヒットしない。 【クエリ】のWhere条件左辺をひねってみては? WHERE (((Nz(TBL.NAME)) Like IIf(Nz([Forms]![F_Form]![name])='','*','*'+Nz([Forms]![F_Form]![name])+'*')));

iroha_168
質問者

お礼

ご回答ありがとうございます。 教えていただいたSQL文で意図した動作となりました。 また、何故ヒットしないかご教示いただきありがとうございました。 右辺だけでなく、左辺にもNzをつければ良かったんですね。 このたびはどうもありがとうございました。

その他の回答 (2)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

以下はフォームでの Filter 設定でのものになりますが、クエリの WHERE でも同じです。 http://oshiete1.goo.ne.jp/qa5180535.html 一連の流れが参考になればと ※ 当該個所以外についても参考になるかと、

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご提示いただいたURLを参考にさせていただきたいと思います。 このたびはどうもありがとうございました。

  • tag1701
  • ベストアンサー率54% (67/123)
回答No.2

下記のsqlを試してみてください。 SELECT * FROM TBL WHERE (((IIf(IsNull([Forms]![F_FORM]![NAME]),True,[NAME] Like "*" & [Forms]![F_FORM]![NAME] & "*"))=True));

iroha_168
質問者

お礼

ご回答ありがとうございます。 教えていただいたSQL文で意図した動作となりました。 このたびはどうもありがとうございました。

関連するQ&A

  • ACC クエリ 条件にIIf

    宜しくお願いします。 ACCESSのクエリで、抽出条件に画面からの値を使用したいのですが、 その値がNULL(未入力)時には全件抽出としたいのですが、 うまく行きません。下記の「""」には何をセットすれば よいのでしょうか? IIf (NOT ISNULL( [Forms]![F_伝票照会]![伝票NO]), [Forms]![照会]![伝票NO], "")

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

    「作表条件」というフォームにテキストボックスとして「日付1」、「日付2」を設置しています。 元のテーブルには「日付」という項目があり、「日付1」から「日付2」までのデータを抽出するため、 クエリの条件式に Between Nz([Forms]![作表条件]![日付1],#1800/01/01#) And Nz([Forms]![作表条件]![日付2],#9999/12/31#) と記述しています。 ただ、元のテーブルの日付がNULL値の場合があり、その場合「日付1」および「日付2」が空欄だとNULL値のレコードが抽出されません。 「日付」がNULLの場合でも抽出できるようにするには、どのようにすればよいでしょうか? どなたか教えてください。

  • 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)のケースも合わせて満足するコーディングを宜しくご指導下さい。

  • 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])) なんてしてみましたがだめでした。 ご回答よろしくお願いします。

  • クエリの条件にての"*"の使い方

    いつもお世話になっております。 Access2000にてクエリの抽出条件で悩んでいます。フォームにて入力があったときはそれで抽出・入力が無かった時は全て抽出したいと思い Like forms![フォーム名]![コントロール名]&"*" をクエリの抽出条件にセットしました。入力があったときはOKなのですが、入力が無かった時はテーブルにデータがあるレコードのみを抽出してしまいます。データが入ってないレコードも抽出したいのですがどのように記述すればいいのでしょうか? 宜しくお願い致します。

  • 【Access】クエリをソースに移植する方法

    下記のクエリをフォームのVisual Basicに移植したいと思ったのですが、どのように書けば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 【クエリ(Q_FORM)】 INSERT INTO W_TBL SELECT T_TBL.* FROM T_TBL WHERE (((T_TBL.key) Like '*' & Forms!F_FORM!txt_key & '*') And ((T_TBL.flag) Like '*' & Forms!F_FORM!txt_flag & '*')); 【テーブル(T_TBL)】 id| key|flag 1|1234|1 2| 12|0 3| 12|1 【テーブル(W_TBL)】 id| key|flag 【フォーム(F_FORM)】 テキストボックス:txt_key テキストボックス:txt_flag コマンドボタン:cmd_insert 【フォームのVisual Basic】 Option Compare Database Option Explicit Private Sub cmd_insert_Click() DoCmd.OpenQuery "Q_FORM" End Sub それと、現在のクエリではtxt_keyが部分一致(txt_keyが12の場合、1234もヒットしてしまいます)すればヒットするようになっていますが、これを完全一致にする方法をご存知の方がいらっしゃいましたら、ご教示の程よろしくお願いします。 単純に完全一致させたいのであれば、txt_key前後のLikeや*を除けば良いのではと思うのですが、txt_keyが未入力の場合は全件ヒットさせたいと思っており、整合性を取る方法が分かりませんでした。 以上、よろしくお願いします。

  • 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] & "*" テキスト名がおかしいのですが、ご了承下さい。

  • ACCESSのあいまいな条件のクエリ 

    フォームで金額を入力します。 この入力された金額を使ってクエリの条件を作りたいと考えています。 <条件> ・金額が未入力の場合は、全て抽出。 ・金額が入力されている場合は、その金額以上を抽出   (例:1000と入力された場合は、>=1000) 下記のような条件式を入れたら、金額を入力しているにも関わらず、 何も入力されてきませんでした。 IIf(IsNull([Forms]![フォームA]![txt金額]),Like "*",>=Val([Forms]![フォームA]![txt金額]))

  • ACCESS クエリの抽出条件

    毎度お世話になります。 クエリをレコードソースとするフォームから、コマンドボタンでアクションクエリを実行するときの抽出条件の書き方を教えて頂けないでしょうか? 二つのテーブル(別のACCESSファイルからリンク)を基にパラメータクエリを作っています。 そのクエリを基にフォームを作っています。 さらに、そのフォームに追加クエリを実行するボタンを置いています。 フォームに表示してあるレコードだけ(パラメータで抽出されたレコードだけ)、他のテーブルに追加しようと思っているのですが、実行ボタンを押すともう一度パラメータが出てきてしまいます。 多分テキストボックスの値を読み取る際にレコードソースがテーブルでないのが問題じゃないかと思うのですが。。。 テーブル:Container / Items クエリ:From_Con(パラメータは[Container]フィールド) フォーム:From_Con(テキストボックス名は[txtContainer]) 追加クエリ:From_Con_App(抽出条件は[Forms]![From_Con]![txtContainer]としてみたがうまく動きません。) デザインビューの抽出条件を使う方法? SQLを使う方法? QueryDefを使う方法? いろいろありそうですが、ネットで検索してもヒットしません。 分かりにくい説明で申し訳ありませんがご教授願います。

  • Accessの抽出条件

    お世話になります。 選択クエリの抽出条件の書き方がわかりません、どなかたお教えください。 質問:基本データ、の数値定義の、登録番号の、4225403~4246003の間の抽出条件で選択クエリの抽出条件セル内にどのように書けばよいでしょうか? ちなみに私は、&[Forms]![F_抽出条件]![抽出条件]のForms、F_抽出条件、抽出条件、!、[] 等の意味がまったくわからないレベルです。 そのままセルにコピペでOKの形で教えてください。

専門家に質問してみよう