2017-12-05 9 views
0

例として、食品を使用しましょう。MSアクセスフォーム:最初のコンボボックスの値を使用して、2番目のコンボボックスのオプションをフィルタリングしますか?

表:食品

ID || Type || Name 
    1 || Fruit || Apple 
    2 || Fruit || Orange 
    3 || Veggie || Pea 
    4 || Veggie || Corn 

コンボボックス1:TypeCB
行ソース(SQL):

SELECT DISTINCT 
    Count([Food].ID) AS CountOfID, 
    [Food].Type 
FROM [Food] 
ORDER BY [Food].Type; 

(私は "CountofID" を使う理由は、独自のを取得していますIDの値が一意であるため、値を入力します。それ以外の場合は繰り返します)

これは最初は完璧に機能しますが、次のComboBoxに値をプルしようとすると、2番目のコンボボックスは空のままです。塗りつぶした最初のコンボボックスでフォームをリフレッシュしても、修正されません。

コンボボックス2:NameCB
行ソース(SQL):

SELECT 
    Count([Food].ID) AS CountOfID, 
    [Food].Name 
FROM [Food] 
HAVING ((([Food].Type)=[Forms]![Food Form]![TypeCB].[SelText])); 

は、このデータをつかむために別の/より良い方法はありますか?

+0

なぜこれらのクエリにCountを含めるのですか? Distinctを返すだけでよいわけではありません。最初のコンボボックスの値がCountの場合、これは2番目のコンボボックスのフィルタ条件としては役に立たない。私はSelTextプロパティがこのように使用されるのを見たことがありません。私はおそらくそれを削除する必要がありますと思います。 – June7

答えて

1

タイプ・カラムのみを使用しているため、TypeCBの行ソースにCountは必要ありません。それを残す場合は、TypeCBのBound Columnプロパティが2に設定されていることを確認して、コンボボックスの値がCountOfIDではなくType列から選択されるようにします。

あなたのNameCB Row Sourceは[SelText]プロパティを除いてOKです。それを変更します。

SELECT 
     Count([Food].ID) AS CountOfID, 
     [Food].Name 
    FROM [Food] 
    HAVING ((([Food].Type)=[Forms]![Food Form]![TypeCB])); 

あなたTypeCBコンボボックスのBound ColumnプロパティはType値を持つ列に設定されている場合は、値を取得するには、コントロール自体を参照することができます。

TypeCBコンボボックスのAfter Updateイベントに、NameCB.Requery()を追加してNameCBコンボボックスを更新します。

関連する問題