Microsoft Access 掲示板

コンボボックスの選択肢を絞り込む

1 コメント
views

お世話になっております。

帳票タイプのサブフォームに配置したコンボボックスの、値集合ソースに使用しているマスターテーブルのレコードが膨大で、選択肢の中から目的のレコードを見つけるのが大変です。

マスターテーブル名:M_商品
テーブルのフィールド
1.商品ID(オートナンバー)
2.商品名(短いテキスト)
3.洋or和(短いテキスト)
4.生or焼(短いテキスト)

商品ID商品名洋or和生or焼
1ショートケーキ洋菓子生菓子
2ティラミス洋菓子生菓子
3フィナンシェ洋菓子焼菓子
4八つ橋和菓子生菓子
5どら焼き和菓子焼菓子

上記のようなマスターテーブルがあるとします。

メインフォームに配置したオプショングループ(opt_洋or和)のopt_和を選択すると、洋or和フィールドが"和菓子"のレコードだけが、コンボボックスの選択肢として表示される、といったことは可能でしょうか?
また、opt_和を選択した状態で、もうひとつのオプショングループ(opt_生or焼)のopt_生を選択すると、洋or和フィールドが"和菓子"で、かつ生or焼フィールドが"生菓子"のレコード(例のマスターテーブルだと八つ橋のみ)がコンボボックスの選択肢として表示される、といったことは可能でしょうか?

ACDC包囲網
作成: 2025/05/20 (火) 18:21:18
通報 ...
1

方法としては下記の2つが考えられます。

  1. コンボボックスの値集合ソースのクエリ(SQL)にメインフォームのオプショングループを参照する抽出条件を設定する。

  2. メインフォームのオプショングループの更新後処理でサブフォームのコンボボックスの値集合ソースのSQLを変更する。

オプションの選択肢が「洋or和」「生or焼」だけなら1.の方法がシンプルだと思います。


オプショングループ(opt_洋or和)
 オプションボタン(opt_洋) オプション値: 1
 オプションボタン(opt_和) オプション値: 2

オプショングループ(opt_生or焼)
 オプションボタン(opt_生) オプション値: 1
 オプションボタン(opt_焼) オプション値: 2

コンボボックスの値集合ソースの設定

SELECT * FROM M_商品
WHERE
 洋or和 = Choose(Parent!opt_洋or和,"洋菓子","和菓子")
 AND
 生or焼 = Choose(Parent!opt_生or焼,"生菓子","焼菓子");

メインフォームのオプショングループの更新後処理

Private Sub opt_洋or和_AfterUpdate()
    Me.サブフォーム1.Form!コンボボックス1.Requery
End Sub

サブフォームコントロール名、コンボボックス名は実際のものに変更
opt_生or焼 も同様に。

オプショングループの選択肢に全て(抽出しない)というのを追加するなら抽出条件が複雑になるので2.の方法をとりますね。

 洋,和,全(抽出しない)


オプショングループ(opt_洋or和)
 オプションボタン(opt_洋) オプション値: 1
 オプションボタン(opt_和) オプション値: 2
 オプションボタン(opt_全) オプション値: 3

オプショングループ(opt_生or焼)
 オプションボタン(opt_生) オプション値: 1
 オプションボタン(opt_焼) オプション値: 2
 オプションボタン(opt_全) オプション値: 3

メインフォームのモジュール

Private Sub opt_洋or和_AfterUpdate()
    SetComboBoxRowSource
End Sub

Private Sub opt_洋or和_AfterUpdate()
    SetComboBoxRowSource
End Sub

Private Sub SetComboBoxRowSource()
    Dim stSQL As String

    Select Case Me.opt_洋or和.Value
    Case 1
        stSQL = " AND 洋or和 = '洋菓子'"
    Case 2
        stSQL = " AND 洋or和 = '和菓子'"    
    End Select
    Select Case Me.opt_生or焼.Value
    Case 1
        stSQL = stSQL & " AND 生or焼 = '生菓子'"
    Case 2
        stSQL = stSQL & " AND 生or焼 = '焼菓子'"    
    End Select

    If stSQL = "" Then
        stSQL = "SELECT * FROM  M_商品;" 
    Else
        stSQL = "SELECT * FROM  M_商品 WHERE" & Mid(stSQL, 6) & ";"
    End If

    Me.サブフォーム1.Form!コンボボックス1.RowSource = stSQL

End Sub