MS Access Form:使用第一个Combobox的值来过滤第二个Combobox的选项?

时间:2017-12-05 22:36:49

标签: sql ms-access combobox

举个例子,让我们用食物。

表:食物

  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”的原因是获取唯一的Type值,否则它们会被重复,因为ID是唯一的)

现在这适用于第一个,但是,当我尝试将值拉到我的下一个ComboBox时,第二个组合框保持为空。在第一个组合框填充的情况下刷新表单并不能解决问题。

Combobox 2: NameCB
行源(SQL):

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

是否有其他/更好的方法来获取此数据?

1 个答案:

答案 0 :(得分:1)

您在TypeCB的行来源中不需要Count,因为您只使用了“类型”列。如果你保留它,请确保TypeCB的Bound Column属性设置为2,这样组合框的值将从Type列而不是CountOfID中获取。

您的NameCB行来源正常,但[SelText]属性除外。改变它:

  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组合框。