Ms access 访问未触发的数据表事件

Ms access 访问未触发的数据表事件,ms-access,vba,ms-access-2007,Ms Access,Vba,Ms Access 2007,我有一个Access窗体,它有一个数据表子窗体,该子窗体使用下面的代码使用表填充 SELECT * INTO temp_filter_tbl FROM (SELECT DISTINCT JobsID, ID, ReferenceDate, Source, Status, NODE, NodeStatus, DocSource, CutOverYear FROM tempTable" & sqlafterwhere & ")" db.Execute (sql) Me.Combina

我有一个Access窗体,它有一个数据表子窗体,该子窗体使用下面的代码使用表填充

SELECT * INTO temp_filter_tbl FROM (SELECT DISTINCT JobsID, ID, ReferenceDate, Source, Status, NODE, NodeStatus, DocSource, CutOverYear FROM tempTable" & sqlafterwhere & ")"
db.Execute (sql)
Me.CombinationViewDS.SourceObject = "Table.temp_filter_tbl
Me.CombinationViewDS("JobsID").ColumnHidden = True
Me.CombinationViewDS("ID").ColumnHidden = True
Me.CombinationViewDS.Requery
我想捕获AfterUpdate事件,以便将临时表中的更改应用于生成临时过滤器tbl的源表。当我编辑数据表中的一行并单击数据表右侧的小铅笔时,临时过滤器tbl中的对应行会更新,因此更新正在进行,但不会触发任何事件。AfterUpdate事件不是唯一一个未触发的事件。我尝试的所有事件都没有触发,并且所有事件都是在“属性”窗格的数据表的“设计”视图中创建的

Option Compare Database

Private Sub Form_AfterUpdate()
    Debug.Print "Datasheet After Update"
End Sub
Private Sub Form_BeforeUpdate()
    Debug.Print "Datasheet Before Update"
End Sub

Private Sub Form_Click()
    Debug.Print "Datasheet On Click"
End Sub

Private Sub Form_DataChange(ByVal Reason As Long)
    Debug.Print "Datasheet On Data Change"
End Sub

Private Sub Form_DataSetChange()
    Debug.Print "Datasheet On Data Set Change"
End Sub

Private Sub Form_Dirty(Cancel As Integer)
    Debug.Print "Datasheet On Dirty"
End Sub

Private Sub Form_Load()
    Debug.Print "Datasheet On Load"
End Sub   

我不得不将这个问题的答案归功于utteraccess.com/forum上的datAdrenaline。

在数据表上设置源对象时,access会动态创建表单对象。 要使用内存中的窗体对象访问创建,必须将窗体的事件属性设置为公共范围内的函数

Me.CombinationViewDS.AfterUpdate = "=SomFunctionCall()"

我不得不将这个问题的答案归功于utteraccess.com/forum上的datAdrenaline。

在数据表上设置源对象时,access会动态创建表单对象。 要使用内存中的窗体对象访问创建,必须将窗体的事件属性设置为公共范围内的函数

Me.CombinationViewDS.AfterUpdate = "=SomFunctionCall()"

将表用作SourceObject时,没有用于存储事件cde的VBA代码模块。只需基于表创建一个具有默认视图模式数据表的新表单,并将其用作子表单的SourceObject。在这种情况下,您可以使用任何事件代码,它将正常工作。在主窗体中,将代码更改为以下内容:

sql = "SELECT * INTO temp_filter_tbl FROM (SELECT DISTINCT JobsID, ID, ReferenceDate, Source, Status, NODE, NodeStatus, DocSource, CutOverYear FROM tempTable " & sqlafterwhere & ")"
db.Execute (sql)
Me.CombinationViewDS.Requery
隐藏/重命名已创建表单中的列


我不确定您是否真的需要基于表创建完全动态的子表单,并使用来自Outtaccess的变通方法。它可以工作,但它使表单逻辑更难支持,并且不必要地增加了公共函数的数量

当您使用表作为SourceObject时,您没有用于存储事件cde的VBA代码模块。只需基于表创建一个具有默认视图模式数据表的新表单,并将其用作子表单的SourceObject。在这种情况下,您可以使用任何事件代码,它将正常工作。在主窗体中,将代码更改为以下内容:

sql = "SELECT * INTO temp_filter_tbl FROM (SELECT DISTINCT JobsID, ID, ReferenceDate, Source, Status, NODE, NodeStatus, DocSource, CutOverYear FROM tempTable " & sqlafterwhere & ")"
db.Execute (sql)
Me.CombinationViewDS.Requery
隐藏/重命名已创建表单中的列


我不确定您是否真的需要基于表创建完全动态的子表单,并使用来自Outtaccess的变通方法。它将起作用,但它使表单逻辑更难支持,并且不必要地增加了公共函数的数量

许多事件在数据表表单上不起作用。切换到单表单或连续表单。请休息一下,重新表述您的问题:)为什么不基于表创建表单并将其用作子表单的SourceObject?在本例中,您将有一个放置事件的位置,正如我从您的代码中看到的,您正试图在main for中捕捉事件,而不是在subform module中捕捉事件,因为table object不存在子窗体模块。这些事件中的许多在数据表窗体上不起作用。切换到单表单或连续表单。请休息一下,重新表述您的问题:)为什么不基于表创建表单并将其用作子表单的SourceObject?在本例中,您将有一个放置事件的位置,正如我从您的代码中看到的,您试图在main中捕捉事件,而不是在subform模块中捕捉事件,因为table object不存在子表单模块。有趣的解决方案。考虑在你的答案中链接论坛线程。但我倾向于使用多个条目/连续表单来完整、稳定地访问触发事件。各有所爱!有趣的解决方案。考虑在你的答案中链接论坛线程。但我倾向于使用多个条目/连续表单来完整、稳定地访问触发事件。各有所爱!