每当添加新记录或更新现有记录时,如何重新查询组合框?

时间:2019-05-19 15:13:24

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

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

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

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

enter image description here

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

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

1 个答案:

答案 0 :(得分:1)

通常,在事件触发代码中,通常将VBA(不要与VB,VB.Net或VBS混合使用,而是MS Office应用程序代码)。

在MS Access中,这些事件通常发生在表单和报表上,通常是由于用户交互所致。您无需直接跳入VBA编辑器即可编写需要处理的代码,而可以找到事件(AfterUpdateBeforeInsertOnClickOnCurrentOnOpen,在{em>事件标签下的属性表中需要OnClose),然后启用代码,该代码将自动为您编写子例程外壳,然后添加.Requery行。实际上,甚至可以使用macros处理诸如.Requery之类的简单行(不要与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