• 締切済み

アクセス チェックボックスとクエリ

いつもお世話になっております。アクセス初心者です。 あるフォームのチェックボックスのオンオフとコンボボックス、 クエリの選択条件が思うように連携できなくて困っています。 やりたいことは、、、フォームのチェックボックスが、 ON(True)ならば、 フィールドにコンボボックスのキーワードを含むレコードおよびフィールドが空白のレコードを抽出し、 OFF(False)ならば、 フィールドにコンボボックスのキーワードを含むレコードのみでフィールドが空白のレコードは抽出しない、 としたいのですが…。 IIfやSwitchで式を書きましたが、チェックを入れても外しても、どちらも抽出件数が0件になります。 クエリの実行は、コマンドボタンで別のフォームを開いています。 (IIfでは、エラーが出ているのか、チェックを入れた時『~キャンセルされました』と出ます。  IIf(…,…,IIf(…,…,…)) という感じで書きました。) Switchの時のクエリの抽出条件の式は、次のような感じです。 Switch([Form]![チェックボックス]=True,([テーブル名].[フィールド名]) Like "*" & [Form]![コンボボックス] & "*" Or Is Null,[Form]![チェックボックス]=False,([テーブル名].[フィールド名]) Like "*" & [Form]![コンボボックス] & "*") ( Like の前の『([テーブル名].[フィールド名])』は、式をビルドすると、勝手に追加されてきます。) このようなことはできないのでしょうか? 別の方法が必要でしょうか? すみませんが、教えてください。宜しくお願い致します。

みんなの回答

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

チェックボックスが3値(True/False/Null)をとる設定? >コマンドボタンで別のフォームを開いています。 where条件を持つテキストボックスを配置(運用時は非表示にする) クリックで検索実行するように作ると考えやすいかも。 別フォームが使用するクエリは、上記のwhere条件を持つテキストボックスを参照させる。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

たぶん、「アクセス チェックを入れたキーワードで絞り込み」という 標題のページだったと思うのですが、先ほど見たらページがなくなって いました。質問はこのページの内容に即したものだと思うのですが、 一応、ページをコピーしていたので内容を見ながら、ちょこちょこ 作ってみたのですが。 肝心のページがなくなっているので、コードを表示しようかどうか 迷っているのですが、どうしましょう????? なにせ、コードの量が多いので、ひょっとしたら説明も含めると 2ページくらいになるかもしれません。一応、必要なことは 入っています。 どうしましょう????

splendor1945
質問者

補足

piroin654様、誠に申し訳ありません。 半年経過していますね。すみません。 考えていただいてありがとうございます。   パソコンの入れ替えなどがあって、バタバタしていたため、 確認が遅くなってしまいました。 『遅い』というレベルではありませんが…。 その間に、この質問も消えたようです。   もし、まだ、作っていただいたコードをお持ちであれば、 お送りください。お待ちしております。 メールアドレスなどが必要であれば、お知らせします。 よろしくお願いします。

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

> しかし、キーワードで『含む』選択をしているフィールドが > 他にもたくさん(このほかに4~5フィールド)あって…。 こういうことを後からいわれても困るんですよね。 フィールド数が多い場合は、やり方を変える必要がありますので。 もちろん、どんな複雑な WHERE条件でも、スラスラ書けるなら普通にクエリでかまいませんが、 条件が追加になった場合など、泣きたくなると思います。 あと、何らかの事情で、何が何でも、クエリでなければいけない場合、 これでも、複雑なら、動的に SQL を書き換えてしまうこともあります。 フォームで、抽出するには ・クエリのWhere条件 を使用。 ・フォームのフィルタを使用。 ・レコードソースを書き換える。 などありますが、 条件の組み合わせが多くなる場合は フィルタ を使うのが普通だと思います。 具体的な方法はこちらを参考に。 複数条件の抽出フォームの設計 その1 http://hatenachips.blog34.fc2.com/blog-entry-129.html 下の、「関連してそうな記事」の 複数条件の抽出フォームの設計 その2 複数条件の抽出フォームの設計 その3 にも目を通すことをお勧めします。

splendor1945
質問者

お礼

申し訳ありません。説明不足でした。 頂いたページについて、よく読んで、勉強します。 大変お手数をおかけしました。ありがとうございました。

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.2

No.1 です。 肝心なところが間違っていましたね。 (^^; > 2.[チェックボックス] がオフ であって、[フィールド名] が Null であるもの。  2.[チェックボックス] がオン であって、[フィールド名] が Null であるもの。 SQL は 合っています。 なお、今回のケースでは影響ありませんが フォームのチェックボックスに、既定値(大抵の場合 「False」 ) を設定しておかないと 誤動作する場合があります。

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.1

条件を整理すると、ずっと単純になり、 IIf も Switch も不要になります。 [コンボボックス] の部分一致 は、[チェックボックス] の値と無関係です。 ですから、[フィールド名] の抽出条件は 1.[コンボボックス] と部分一致するもの。 2.[チェックボックス] がオフ であって、[フィールド名] が Null であるもの。 このいずれかを満たすものです。(OR 条件です。) SQL なら SELECT フィールド名 FROM テーブル名 WHERE (フィールド名 Like "*" & [Forms]![F検索]![キーワード] & "*") OR ((フィールド名 Is Null) AND ([Forms]![F検索]![チェックボックス]=True)) ※抽出条件を入力するフォーム名が 「F検索」 の場合です。  ご自分のフォーム名に修正してください。

splendor1945
質問者

お礼

お礼が遅くなりました。すみません。 ご回答ありがとうございます。 説明して頂いた意味は、なんとなく分かりました。 SQL文も『なんとなく』分かりました。 しかし、キーワードで『含む』選択をしているフィールドが 他にもたくさん(このほかに4~5フィールド)あって…。 他のフィールドは、とりあえず、 今は、チェックボックスを使わないのですが、 フィールド数が多く、降順とかもあって、 アクセスでSQL文を見ると、目がチカチカします(苦笑)。 そこで、この教えて頂いた文を挿入できるものであれば、挿入の仕方を教えてほしいのですが…。 現在のSQL文のイメージは、 SELECT フィールド名,フィールド名,フィールド名,… FROM (( …INNER JOIN…ON… LEFT JOIN…ここはわけが分かりません(苦笑)。省略です。 そして、 WHERE ここからは、Like "*" & コンボボックス & "*" Or Is Null…をANDでつなぐ文が連なっていて、 最後に降順のORDER BY…という感じです。 ここに挿入することだと思うのですが…。 『( )』の付け方など、イメージだけでも結構です。 もう少し教えていただけないでしょうか。 または、クエリの中で何とか処理できる方法があると 助かります。宜しくお願い致します。

関連するQ&A