Microsoft Access 掲示板

クエリのフィールドに式の記述

3 コメント
views
4 フォロー

初心レベルの者です。クエリのフィールドに式を記述方法の質問です。
商品テーブルにはID、品名、フィールド色々と終息(チェックボックス)があります。商品登録・検索用の単票フォームがあり、それに[終息除く](値1)と[終息含む](値2)のオプションボタングループ(名前:opb_syusoku)を実装してます。商品品名検索用のコンボボックスもあり、そのソースは商品テーブルに設定しています。
オプションボタン(1Or2)によりコンボボックスのリスト項目を変更したい(終息除く分、終息も含める分)のでコンボボックスのフォーカス取得後イベントにRowSourceをIFで切り替えをVBAコード記述してます。そうする為にソース用クエリを2つ用意してます(終息<>Yesと設定なし)。これで機能はしているのですがソース切り替えずにクエリを一つにまとめたいのです。多分クエリのフィールドに式を記述で出来ると思うのですが、記述内容がわかりません。現状と同じ方法で他のフォームにも設定しておりクエリが増える一方で管理がややこしいので。
いい方法を教えて頂けますでしょうか。宜しくお願いします。

ABC
作成: 2024/05/29 (水) 08:47:59
通報 ...
1
hiroton 2024/05/29 (水) 09:27:15 3b3f4@f966d

商品登録・検索用の単票フォームがあり、

フォームの内容を参照することになるので、フォームの名前も質問内に入れるようにしましょう


終息除く分、終息も含める分

終息<>Yesと設定なし

全て含める(条件を設定しない)場合と、絞り込みをする場合を切り替えたいとなると、単純な保存済みクエリにするには悩むところですね。今回はYes/Noなので、例えば

Where (終息=False Or 終息=(Forms![商品登録・検索用]![opb_syusoku]=2))

とすると、
「『全て含める』ときはYesもNoも抽出対象にする(終息=False Or 終息=True)」
「『終息除く』ときはNoだけを抽出対象にする(終息=False Or 終息=False)」
として実現できます

SQL構文的には無駄な記述になりますが、保存済みクエリで対応するときにはこういう一捻りが必要になることも多いですね

2

オプションボタン(1Or2)によりコンボボックスのリスト項目を変更したい(終息除く分、終息も含める分)のでコンボボックスのフォーカス取得後イベントにRowSourceをIFで切り替えをVBAコード記述してます。

RowSourceに設定したクエリに抽出条件を設定するなら、hirotonさんの回答のような条件になりますね。

オプショングループとコンボボックスが同じフォームにあるのなら、フォーム名は省略することができますので下記でもいいですね。

Where (終息=False Or 終息=([opb_syusoku]=2))

コンボボックスのフォーカス取得後イベントでコンボボックスを再クエリします。


RowSourceにはSQLも設定できますので、VBAを使うなら、RowSourceにSQLを設定してもいいですね。
そうするとクエリ自体が不必要になりクエリが増えて管理が煩雑ということがなくなります。

Private Sub cmb_syouhin_GotFocus()
    If Me.opb_syusoku = 1 Then
        Me.cmb_syouhin.RowSource = "SELECT * FROM 商品テーブル WHERE 終息 = False;"
    Else
        Me.cmb_syouhin.RowSource = "商品テーブル"
    End 
End Sub
3
ABC 2024/05/29 (水) 12:37:42 ddfe5@b2bdc

hirotonさん・hatenaさん ありがとうございます。
コンボボックスとオプショングループは同一フォームにあります。
hatenaさんのコードを編集して記述したら上手くいきました。簡素化できてありがたいです。
ちょっとした事ならSQLでした方が断然楽ですね。
お世話になりました。