如何在表级别记录Access中的数据更改?


8

我支持非营利组织的Access数据库。我们遇到了一些数据神秘变化的问题,关于它是由不是最懂计算机的用户还是我的某些后台处理引起的,引起了一些友好的辩论。

我为这些情况在UI级别上添加了一些检查,但是我想在数据库表级别上进行一些检查,以记录更改某些字段时的情况。通过这种方式,我将知道该更改是由用户启动还是仅由后台运行的更新查询启动。通常,我会使用on update触发器,但据我所知Access不支持触发器。Access中是否还有其他可用的日志记录或类似触发器的功能?

Answers:


4

不幸的是,Microsoft Access没有触发器,甚至没有类似触发器的东西。在我的头顶上,您有几个令人讨厌的选择:

  • 创建DateModifiedUserModified列,并更新代码以包括这些值。不利的一面是,您只会知道最后一位更新记录的人,而不会查看历史记录。
  • 保持Access的前端,并将表移植到SQL Server Express后端。这样,您就可以使用触发器(以及备份作业和其他不错的东西)。

4

除了LittleBobbyTables方法之外,还有第三个选项,其中涉及_audit为每个常规表创建一个表并编写整个lotta逻辑来支持它们,以便在发生更改时,可以在这些表中插入一条记录来这样做。(您已经知道何时保存/更新/删除记录,是吗?)

当然,这是“更大的数据库”的实现方式,其缺点是您必须手动执行许多逻辑来模拟服务器上的触发器类型的工作。


4

请注意,例如SQL Server Express是免费的,并且可能是Access的直接替代品。这将为您提供所需的审核功能。我认为“审计表”方法不可行。它假定连接到数据库的任何人都是通过具有该逻辑的“官方”客户端进行连接的。使用触发器,如果​​没有从任何随机客户端触发的触发器,就无法获取数据。

第三种选择是使用Wireshark或类似工具实际监视客户端和数据库之间的通信(我假设这实际上不是TDS,而是文件共享协议?),然后您可以确切地看到谁在何时何地从哪台计算机执行操作。不利的一面是,它需要大量存储空间,需要一些脚本来进行分析,并且可能会影响性能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.