Access 2013 中的重新查询组合框
Requery combo boxes in Access 2013
我在一个表单中创建了两个相关的组合框。如果您在第一个框中选择 Category
,它将过滤第二个框中可用的 Products
列表。我已将类别产品 selections 保存到名为 Test
的 table,其中类别各占一行。
如果您 select 一个类别已经在测试中,我想做的是在产品组合框中显示产品。例如,如果您在表单中 select Category=Condiments 和 Product=Ketchup,它会添加到 Test。然后,下次您在表单中 select Category=Condiments 时,Products 组合框(您键入的框,而不是下拉列表)将立即显示 Ketchup。这似乎只有在我在测试中有一行时才有效。如果我添加更多行,ProductComboBox 不会改变。
下面是我的表单的构建方式。
在 CategoryComboBox 的 RowSource 中,我 select 一切
Select * From CategoryTable
在 ProductComboBox 的 RowSource 中,我根据类别筛选产品 selected
Select * From ProductTable Where ProductTable.CategoryID=[forms]![FormTest]![Category]
表单源是 Products left joined to Category on CategoryID。
在 CategoryComboBox 的 On Change 事件和表单的 On Current 事件中,我重新查询 ProductComboBox
ProductComboBox.Requery
但是,使用 ProductComboBox.Requery 只会重新查询下拉列表中的可用选项。它不会在 select 类别之后但 select 产品之前更改当前组合框值。如何从链接到 ControlSource 的 table 重新查询数据?有没有比Requery
更好的VBA函数,还是我需要在宏中使用SQL?
在第一个组合框的 OnChange 事件中,执行以下操作:
Private Sub category_Change()
Dim myID As Long
Me.ProductComboBox.Requery
If Not IsNull(DLookup("ProductID", "tblTest", "CategoryID = " & me.Category)) Then
Me.ProductComboBox = DLookup("ProductID", "tblTest", "CategoryID = " & me.Category)
End If
End Sub
然后更新您的测试 table,如果您要更新 "default" 选项,请输入:
CurrentDb.Execute "UPDATE tblTest SET ProductID = " & Me.ProductComboBox & " WHERE CategoryID = " & Me.Category
这假设 "tblTest" 已经有每个类别的记录。如果没有,您可以生成一些检查并将类别插入 table.
我在一个表单中创建了两个相关的组合框。如果您在第一个框中选择 Category
,它将过滤第二个框中可用的 Products
列表。我已将类别产品 selections 保存到名为 Test
的 table,其中类别各占一行。
如果您 select 一个类别已经在测试中,我想做的是在产品组合框中显示产品。例如,如果您在表单中 select Category=Condiments 和 Product=Ketchup,它会添加到 Test。然后,下次您在表单中 select Category=Condiments 时,Products 组合框(您键入的框,而不是下拉列表)将立即显示 Ketchup。这似乎只有在我在测试中有一行时才有效。如果我添加更多行,ProductComboBox 不会改变。
下面是我的表单的构建方式。
在 CategoryComboBox 的 RowSource 中,我 select 一切
Select * From CategoryTable
在 ProductComboBox 的 RowSource 中,我根据类别筛选产品 selected
Select * From ProductTable Where ProductTable.CategoryID=[forms]![FormTest]![Category]
表单源是 Products left joined to Category on CategoryID。
在 CategoryComboBox 的 On Change 事件和表单的 On Current 事件中,我重新查询 ProductComboBox
ProductComboBox.Requery
但是,使用 ProductComboBox.Requery 只会重新查询下拉列表中的可用选项。它不会在 select 类别之后但 select 产品之前更改当前组合框值。如何从链接到 ControlSource 的 table 重新查询数据?有没有比Requery
更好的VBA函数,还是我需要在宏中使用SQL?
在第一个组合框的 OnChange 事件中,执行以下操作:
Private Sub category_Change()
Dim myID As Long
Me.ProductComboBox.Requery
If Not IsNull(DLookup("ProductID", "tblTest", "CategoryID = " & me.Category)) Then
Me.ProductComboBox = DLookup("ProductID", "tblTest", "CategoryID = " & me.Category)
End If
End Sub
然后更新您的测试 table,如果您要更新 "default" 选项,请输入:
CurrentDb.Execute "UPDATE tblTest SET ProductID = " & Me.ProductComboBox & " WHERE CategoryID = " & Me.Category
这假设 "tblTest" 已经有每个类别的记录。如果没有,您可以生成一些检查并将类别插入 table.