我有一个Access表单,其中包含使用下面的代码使用表格填充的数据表子表单。
0
我想捕获AfterUpdate事件,以便将临时表中的更改应用于构建temp_filter_tbl的源表。当我在数据表中编辑一行并单击数据表右侧的小铅笔时,temp_filter_tbl中的相应行会更新,因此更新正在进行,但不会触发任何事件。 AfterUpdate事件不是唯一没有触发的事件,我尝试触发的事件都没有触发,所有事件都是在属性窗格的数据表的设计视图中创建的。
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
答案 0 :(得分:3)
我必须在utteraccess.com/forum上将datAdrenaline归功于此问题的答案。 Access Datasheet Events Not Firing, Access 2007
Me.CombinationViewDS.SourceObject = "Table.temp_filter_tbl"
在数据表上设置Source对象时,访问会动态创建表单对象。 要使用内存表单对象Access创建,您必须将表单的事件属性设置为公共范围内的函数。
Me.CombinationViewDS.AfterUpdate = "=SomFunctionCall()"
答案 1 :(得分:0)
当您使用表作为SourceObject时,您没有VBA代码模块来存储事件的cde。只需使用默认视图模式DataSheet创建一个基于表的新表单,并将其用作子表单的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
隐藏/重命名已创建表单中的列。
我不确定你是否真的需要根据表制作完全动态的子表单并使用Utteraccess的解决方法。它会起作用,但它使形式逻辑更难以支持和不必要地增加公共功能的数量