【问题标题】:MS Access Form: Use value of first Combobox to filter options of second Combobox?MS Access Form:使用第一个 Combobox 的值来过滤第二个 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 属性。我认为您应该删除它。

标签: sql ms-access combobox


【解决方案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组合框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多