表单级别事件,用于在表单上更改数据时

Form level event for when data is changed on a form

提问人:Andrew G. Johnson 提问时间:12/24/2008 最后编辑:braXAndrew G. Johnson 更新时间:7/11/2020 访问量:3863

问:

好吧,基本上,我正在开发一个 MSAccess 应用程序和管理员将查看和编辑用户数据的表单,我希望能够在更改字段时使用字段的旧值和新值调用事件。此函数会将记录添加到审核表中以跟踪更改。

我在创建查询以将条目添加到审计表时没有问题,但我不知道将函数调用放在哪里。我已经尝试了一些表单级事件,因此我不必进入 50 个字段中的每一个并编辑它们的 onBlur 事件来检查新值,但没有运气。

欢迎任何提示。

VBA MS 访问

评论


答:

0赞 Patrick Cuff 12/24/2008 #1

可以在 After Insert、After Update 和 After Del Confirm 事件中调用函数。这些有点像在插入、更新或删除记录后触发的触发器。

评论

0赞 Andrew G. Johnson 12/24/2008
我尝试过这个(特别是在更新之前/之后),发现当我在字段之间切换时,它并不总是更新,但有时只有在我关闭表单或移动到新记录时才会更新。我想这是为了提高效率,但这意味着我必须将所有原始数据存储在全局变量中进行比较
2赞 Fionnuala 12/24/2008 #2

Microsoft 有一篇关于此的文章:如何在 Access 2000 中创建表单中记录更改的审核跟踪

0赞 Philippe Grondier 12/24/2008 #3

解决方案 (1) 是在“beforeUpdate”事件中添加一个事件处理程序。Remou 的提议非常有趣。

解决方案 (2) 是在 afterUpdate 事件中将 Recordset 中的数据与控件中的数据进行比较:对于绑定到 RecordsSet 中字段的控件,控件中的值与 Recordset 中的值不同。当控制源是直接字段名称时,这非常容易。

但是我不喜欢在窗体级别审核更改的概念:它的结果可能不明确,因为在窗体级别更改的数据可能不会保存在表级别,因为可以在更新基础记录集之前关闭窗体,或者因为 SQL 查询不会发送到服务器。

如果数据更新是通过 SQL synatx 进行的,则解决方案 (3) 将从 Access 应用程序发送到数据库服务器的“INSERT”或“UPDATE”字符串存储在“事务日志”中。