dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。アクセス初心者です。

あるフォームのチェックボックスのオンオフとコンボボックス、
クエリの選択条件が思うように連携できなくて困っています。

やりたいことは、、、フォームのチェックボックスが、

ON(True)ならば、
フィールドにコンボボックスのキーワードを含むレコードおよびフィールドが空白のレコードを抽出し、

OFF(False)ならば、
フィールドにコンボボックスのキーワードを含むレコードのみでフィールドが空白のレコードは抽出しない、

としたいのですが…。

IIfやSwitchで式を書きましたが、チェックを入れても外しても、どちらも抽出件数が0件になります。
クエリの実行は、コマンドボタンで別のフォームを開いています。
(IIfでは、エラーが出ているのか、チェックを入れた時『~キャンセルされました』と出ます。
 IIf(…,…,IIf(…,…,…)) という感じで書きました。)

Switchの時のクエリの抽出条件の式は、次のような感じです。

Switch([Form]![チェックボックス]=True,([テーブル名].[フィールド名]) Like "*" & [Form]![コンボボックス] & "*" Or Is Null,[Form]![チェックボックス]=False,([テーブル名].[フィールド名]) Like "*" & [Form]![コンボボックス] & "*")
( Like の前の『([テーブル名].[フィールド名])』は、式をビルドすると、勝手に追加されてきます。)

このようなことはできないのでしょうか? 別の方法が必要でしょうか?
すみませんが、教えてください。宜しくお願い致します。

A 回答 (5件)

チェックボックスが3値(True/False/Null)をとる設定?



>コマンドボタンで別のフォームを開いています。
where条件を持つテキストボックスを配置(運用時は非表示にする)
クリックで検索実行するように作ると考えやすいかも。

別フォームが使用するクエリは、上記のwhere条件を持つテキストボックスを参照させる。
    • good
    • 0

たぶん、「アクセス チェックを入れたキーワードで絞り込み」という


標題のページだったと思うのですが、先ほど見たらページがなくなって
いました。質問はこのページの内容に即したものだと思うのですが、
一応、ページをコピーしていたので内容を見ながら、ちょこちょこ
作ってみたのですが。
肝心のページがなくなっているので、コードを表示しようかどうか
迷っているのですが、どうしましょう?????

なにせ、コードの量が多いので、ひょっとしたら説明も含めると
2ページくらいになるかもしれません。一応、必要なことは
入っています。

どうしましょう????

この回答への補足

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

補足日時:2014/06/18 09:24
    • good
    • 0

> しかし、キーワードで『含む』選択をしているフィールドが


> 他にもたくさん(このほかに4~5フィールド)あって…。

こういうことを後からいわれても困るんですよね。

フィールド数が多い場合は、やり方を変える必要がありますので。

もちろん、どんな複雑な WHERE条件でも、スラスラ書けるなら普通にクエリでかまいませんが、
条件が追加になった場合など、泣きたくなると思います。

あと、何らかの事情で、何が何でも、クエリでなければいけない場合、
これでも、複雑なら、動的に SQL を書き換えてしまうこともあります。

フォームで、抽出するには
・クエリのWhere条件 を使用。
・フォームのフィルタを使用。
・レコードソースを書き換える。
などありますが、
条件の組み合わせが多くなる場合は フィルタ を使うのが普通だと思います。

具体的な方法はこちらを参考に。
複数条件の抽出フォームの設計 その1
http://hatenachips.blog34.fc2.com/blog-entry-129 …

下の、「関連してそうな記事」の

複数条件の抽出フォームの設計 その2
複数条件の抽出フォームの設計 その3

にも目を通すことをお勧めします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/11/25 13:42

No.1 です。



肝心なところが間違っていましたね。 (^^;

> 2.[チェックボックス] がオフ であって、[フィールド名] が Null であるもの。

 2.[チェックボックス] がオン であって、[フィールド名] が Null であるもの。

SQL は 合っています。


なお、今回のケースでは影響ありませんが
フォームのチェックボックスに、既定値(大抵の場合 「False」 ) を設定しておかないと
誤動作する場合があります。
    • good
    • 0

条件を整理すると、ずっと単純になり、


IIf も Switch も不要になります。

[コンボボックス] の部分一致 は、[チェックボックス] の値と無関係です。

ですから、[フィールド名] の抽出条件は

1.[コンボボックス] と部分一致するもの。
2.[チェックボックス] がオフ であって、[フィールド名] が Null であるもの。

このいずれかを満たすものです。(OR 条件です。)

SQL なら

SELECT フィールド名
FROM テーブル名
WHERE (フィールド名 Like "*" & [Forms]![F検索]![キーワード] & "*") OR
((フィールド名 Is Null) AND ([Forms]![F検索]![チェックボックス]=True))

※抽出条件を入力するフォーム名が 「F検索」 の場合です。
 ご自分のフォーム名に修正してください。
    • good
    • 1
この回答へのお礼

お礼が遅くなりました。すみません。
ご回答ありがとうございます。

説明して頂いた意味は、なんとなく分かりました。
SQL文も『なんとなく』分かりました。

しかし、キーワードで『含む』選択をしているフィールドが
他にもたくさん(このほかに4~5フィールド)あって…。

他のフィールドは、とりあえず、
今は、チェックボックスを使わないのですが、
フィールド数が多く、降順とかもあって、
アクセスでSQL文を見ると、目がチカチカします(苦笑)。

そこで、この教えて頂いた文を挿入できるものであれば、挿入の仕方を教えてほしいのですが…。

現在のSQL文のイメージは、
SELECT フィールド名,フィールド名,フィールド名,…
FROM (( …INNER JOIN…ON… LEFT JOIN…ここはわけが分かりません(苦笑)。省略です。
そして、
WHERE
ここからは、Like "*" & コンボボックス & "*" Or Is Null…をANDでつなぐ文が連なっていて、
最後に降順のORDER BY…という感じです。
ここに挿入することだと思うのですが…。
『( )』の付け方など、イメージだけでも結構です。
もう少し教えていただけないでしょうか。
または、クエリの中で何とか処理できる方法があると
助かります。宜しくお願い致します。

お礼日時:2013/11/21 19:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A