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

Posted

技术标签:

【中文标题】MS Access Form:使用第一个 Combobox 的值来过滤第二个 Combobox 的选项?【英文标题】:MS Access Form: Use value of first Combobox to filter options of second Combobox? 【发布时间】:2017-12-05 22:36:48 【问题描述】:

以食物为例。

餐桌:食物

  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 时,第二个组合框仍然为空。刷新填充了第一个组合框的表单并不能解决此问题。

组合框 2:NameCB 行源 (SQL):

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

还有其他/更好的方法来获取这些数据吗?

【问题讨论】:

为什么在这些查询中包含计数?不必只返回 Distinct。如果第一个组合框的值是计数计算,那么这对于第二个组合框的过滤条件是无用的。我从未见过像这样使用 SelText 属性。我认为您应该删除它。 【参考方案1】:

您的 TypeCB 的 Row Source 中不需要 Count,因为您只使用 Type 列。如果保留它,请确保 TypeCB 的 Bound Column 属性设置为 2,这样组合框的值将从 Type 列而不是 CountOfID 中获取。

您的 NameCB Row Source 没有问题,除了 [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组合框。

【讨论】:

以上是关于MS Access Form:使用第一个 Combobox 的值来过滤第二个 Combobox 的选项?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access Form - Enter 键未移动到新行

MS Access 2003 - Unbound Form 使用 INSERT 语句保存到表中;子表单呢?

MS Access:Make Form仅显示最近48HS的记录

MS-ACCESS 写入冲突问题

MS Access 停止触发 Form_Open 事件

如何在 MS Access 中重载 Form_MouseWheel()?