我正在尝试创建一个包含多个类别和子类别的表单。
有没有办法可以在第一个下拉列表(主要类别)中选择的内容与第二个下拉列表中显示的内容(子类别)之间创建关系?
我不想一次列出所有子类别。我只想要与主类别中选定的指定相关的那些....
谢谢!
答案 0 :(得分:2)
这是最常见的访问问题之一。
方法1:在第二个组合框的WHERE子句中,使用对第一个组合框的引用作为标准:
PARAMETERS [Forms]![MyForm]![cmbCategories] Long;
SELECT SubCategory
FROM tblSubCategories
WHERE CategoryID = [Forms]![MyForm]![cmbCategories]
ORDER BY SubCategory;
(将控件引用定义为97之后的Access版本中的参数非常重要,因为这些版本的Access不会像97那样处理Null,之前也是如此)
然后,在第一个组合框的AfterUpdate事件中,重新查询第二个:
Private Sub cmbCategories_AfterUpdate()
Me!cmbSubCategories.Requery
End Sub
方法2:不是硬连接第二个组合框的rowsource来包含对第一个组合框的引用,而是在第一个组合框的AfterUpdate中动态编写其rowsource:
Private Sub cmbCategories_AfterUpdate()
Dim strRowsource As String
strRowsource = "SELECT SubCategory FROM tblSubCategories WHERE CategoryID = "
strRowsource = strRowsource & Me!cmbCategories
strRowsource = strRowsource & " ORDER BY SubCategory;"
Me!cmbSubCategories.Rowsource = strRowsource
End Sub
我倾向于做后者,因为除了过滤到第一个组合框之外我经常需要做其他事情,但对于大多数人来说,采用第一种方法可能更容易。