【问题标题】:How do I requery a combobox every time a new record is added or existing record is updated?每次添加新记录或更新现有记录时,如何重新查询组合框?
【发布时间】:2019-05-19 23:45:56
【问题描述】:

我正在尝试在 Access 中重新查询表单中的组合框,以便每次更新 A) 表中的任何记录都更新 B) 创建新记录。

我从this question了解到我需要使用requery方法,但我不明白的是如何使用事件来触发它。

到目前为止,我已经打开了我的表单并将“有模块”属性更改为“是”。然后我打开VBA编辑器,找到我的表单,双击打开我认为是连接到表单的模块。然后在选项比较数据库下面我输入了“Item.ContainerCombo.Requery”(表的名称、组合框的名称、重新查询方法。)

我知道这不会做任何事情,因为它没有连接到事件,但我不知道要使用哪个事件。有人可以帮忙吗?

请耐心等待,因为我没有在 Microsoft Access 中使用 VBA 的经验。

【问题讨论】:

  • 为什么要从包含组合框的表单中重新查询?如果在修改数据时关闭它,打开它会将数据加载到组合框中。否则,从编辑数据的表单中重新查询组合框:Forms(FormName).Controls("ContainerCombo").Requery

标签: vba ms-access ms-access-2016


【解决方案1】:

通常,VBA(不与 VB、VB.Net 或 VBS 混为一谈,而是 MS Office 应用程序代码)通常被视为事件触发代码中的触发语言。

在 MS Access 中,这些事件主要发生在表单和报表上,通常是由于用户交互。您无需直接跳转到 VBA 编辑器来编写所需的代码,而是在 Property 中找到所需的事件(AfterUpdateBeforeInsertOnClickOnCurrentOnOpenOnCloseEvent 选项卡下的工作表,然后启用将自动为您编写子例程 shell 的代码,然后添加您的 .Requery 行。事实上,像.Requery 这样更简单的行甚至可以用macros 处理(不要与Excel 宏混淆)。访问方法不会在您尝试的子例程或函数之外运行。

具体来说,你提到:

这样 [combobox] 每次都会更新 A) 表中的任何记录都会更新 B) 创建新记录

这对所需的重新查询调用的时间和位置不太清楚。因此,您需要回答:

  1. 何时此表 B 更新或插入?由用户、自动代码还是外部事件?这标识了触发事件的类型(即,AfterUpdateOnClick)。

  2. 此表 B 在哪里更新或插入?在您使用的形式或不同的形式上?表格是否绑定到表 B?这标识了触发器的位置(即表格 A 的 AfterUpdate 而不是表格 B 的 AfterUpdate)。

    • 如果触发器在组合框所在的窗体之外运行,则需要将相对引用(myCombboxName.RequeryMe.myCombboxName.Requery)更改为绝对引用:Forms!myFormName!myCombboxName.Requery

一旦确定了触发类型和位置,您可以将光标放在相应表单的相应事件中的属性表下,然后启用代码,例如以下子程序之一:

Private Sub Form_AfterUpdate()
   Forms!myFormName!myCombboxName.Requery
End Sub

Private Sub Form_AfterInsert()
   Forms!myFormName!myCombboxName.Requery
End Sub

Private Sub myButton_OnClick()
   Forms!myFormName!myCombboxName.Requery
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多