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 语句保存到表中;子表单呢?