• ベストアンサー

ACCESEのビルドの使い方について

フォームでテキストボックスを2つ作成して、 そのテキストに入力した条件を抽出させるようなことを やりたいのですが、クエリの抽出条件を入れられるところに ビルドで作成すると思いますが.. (テキストボックスごとにフィールドは違うのを見るようにしてます) データ抽出するクエリの作成方法(ビルド)で、 テキストボックスに入力されていない場合、 下記のような構文になると思います。 iif(isnull(forms!フォーム1!date1),,) iif(isnull(forms!フォーム1!date2),,) 上記の処理で、NULL(または入力なし)だった場合、 テキストボックスのクエリの該当フィールドに 作成した抽出条件を無視をするような処理をいれたいのですが、 テキストに入力して抽出してみると 何も抽出できなくて困ってます。 参考になるURLがあったら教えてください

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

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

No.1の方の回答にもあるように、ご質問のような場合にはレコードソースを 切り替えて対応するのが一般的かと思います。 (例えばAccess2003までのマクロなら、「値の代入」アクションで『式』に  クエリ名を、『アイテム』に「Forms!(フォーム名).RecordSource」を指定、等) ただ、以下の前提が成り立つ場合には、1つのクエリでも対応が可能です:  1)抽出条件の対象となるフィールドは、常に「空白(Null)」以外(→必須)。  2)抽出速度は、ある程度目を瞑ってもよい。 この場合は、クエリのデザインビューで下の画像のような抽出条件にします。 なお、この例はAnd検索(=双方の条件を満たすものを抽出)です。 Or検索が必要な場合は(多分ご希望はAnd検索かと思いますが)、  【現状】 Like "*" & ~ & "*" | Like "*" & ~ & "*"  【変更】 Like "*" & ~ & "*" |                      | Like "*" & ~ & "*"   というように、段をずらして抽出条件を指定して下さい。 こうすることで、テキストボックスがNullの場合には抽出条件が「Like "**"」と なるため、’対象フィールドがNull以外’の全レコードが抽出対象になります。 ◆ここでNullが対象外となるため、上記「1)」の前提が必須となります。 ◆テキストボックスがNullなら本来不要な抽出(「Like "*"」による全件抽出)  を行っているため、上記「2)」の弊害(=抽出の鈍化)が発生します。 なお、抽出条件式を  Like IIF(IsNull([Forms]![MF1]![テキスト1]),"*",[Forms]![MF1]![テキスト1]) としてやれば、ユーザーがワイルドカード文字(*)を指定することで、前方一致・ 後方一致や、完全一致での検索を行うこともできるようになります。 (ワイルドカード文字を入力しないと、完全一致検索を実行) ところで、上記で「空白(Null)がない前提」としましたが、「空文字("")」は 存在しても構いません。 ですので、Nullを空文字に置換してもよいなら、現在のデータがNullを含んで いたとしても、以下の手順を経ることで対応可能になります。 1)テーブルをデザインビューで開き、対象フィールドの『空文字列の許可』を  「はい」に設定し、保存して閉じる(既になっていればそのままでOK) 2)更新クエリなどで、対象フィールド毎に、Nullを空文字("")に置換  (複数フィールドを同時にやるには、クエリでの代入値に式を設定する必要が   発生します。失敗して既存データを削除(=空文字で上書き)しては問題   なので、面倒でも1フィールドずつ処理することをお勧めします) 3)テーブルを再びデザインビューで開き、対象フィールドの『値要求』を「はい」  に設定 ※実行前に、バックアップは必ず作成しておいてください。 ・・・以上、対応法としてはちょっと特殊なのでお勧めはできませんが、参考までに。

その他の回答 (1)

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.1

抽出条件に書いたのに、無視するような記述はできません ビルドの使い方の問題ではないです。 作成されたクエリーを SQLビューで見てみてください。 select ・・・・ where (条件A)and (条件B) のようになっているはずです。 無視するということは、条件をなくすのですから SQL文がこの形になる必要があります 条件なし ・where 以降が全くない状態  条件Aだけ ・where (条件A) 条件Bだけ       ・where (条件B) の、3パターンがあり得ますが、ビルドで 抽出条件の部分をいくら触っても where (条件A)and (条件B) この、条件の中身であり SELCT文の 上記3パターンを作れるものではありません。 逆に考えられるパターン分 クエリーを作っていおいて フォームに条件を入力し、実際にクエリーを呼ぶときに入力している 状態で、使用するクエリーを指定するか SQL文そのものを、VBAで動的に作成してやる方法が考えられます。

関連するQ&A