【问题标题】:Requery combo boxes in Access 2013在 Access 2013 中重新查询组合框
【发布时间】:2016-08-15 08:31:40
【问题描述】:

我在一个表单中创建了两个相关的组合框。如果您在第一个框中选择Category,它将过滤第二个中可用的Products 列表。我已将 Category-Product 选择保存到名为 Test 的表中,其中 Categories 各占一行。

如果您选择了已在测试中的类别,我想做的是在产品组合框中显示产品。例如,如果您在表单中选择 Category=Condiments 和 Product=Ketchup,则会将其添加到 Test。然后,下次您在表单中选择 Category=Condiments 时,Products 组合框(您输入的框,而不是下拉菜单)将立即显示 Ketchup。如果我在测试中有一行,这似乎才有效。如果我添加更多行,ProductComboBox 不会改变。

这是我的表单的构造方式。

在 CategoryComboBox 的 RowSource 中,我选择了所有内容

Select * From CategoryTable

在 ProductComboBox 的 RowSource 中,我根据所选类别过滤产品

Select * From ProductTable Where ProductTable.CategoryID=[forms]![FormTest]![Category]

表单源是 Products left join to Category on CategoryID。

在 CategoryComboBox 的 On Change 事件和表单的 On Current 事件中,我重新查询 ProductComboBox

ProductComboBox.Requery

但是,使用 ProductComboBox.Requery 只会重新查询下拉菜单中可用的选项。在选择类别之后但在选择产品之前,它不会更改当前组合框的值。如何从链接到 ControlSource 的表中重新查询数据?有没有比Requery更好的VBA函数,还是需要在宏中使用SQL?

【问题讨论】:

  • 请注意,我仍然需要能够使用下拉框输入数据。

标签: ms-access vba ms-access-2013


【解决方案1】:

在第一个组合框的 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

然后要更新您的测试表,如果您想更新“默认”选项,请输入:

 CurrentDb.Execute "UPDATE tblTest SET ProductID = " & Me.ProductComboBox & " WHERE CategoryID = " & Me.Category

这假定“tblTest”已经有每个类别的记录。如果没有,您可以生成一些检查并将类别插入表中。

【讨论】:

  • 将 If 语句添加到 On Change 事件有效,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
相关资源
最近更新 更多