【问题标题】:MS Access - Track changes made to existing table into another table (using table datasheet view - not form)MS Access - 跟踪对现有表所做的更改到另一个表(使用表数据表视图 - 不是表单)
【发布时间】:2015-03-30 08:43:41
【问题描述】:
我希望能够跟踪对现有表中的任何字段所做的任何更改。场景如下:
- 用户在 MS Access 2007/2010 中打开现有表的数据表视图
- 更新 2 个字段和 5 行(10 个单元格)中的值
- 保存表格(覆盖它)
我希望能够将更改(10 个更改/行)推送到新表,然后能够在数据表视图中打开它以引用它。有没有办法在不使用表单的情况下在访问中做到这一点?
【问题讨论】:
标签:
ms-access
ms-access-2007
ms-access-2010
【解决方案1】:
在 2010 年及之后的版本中,您可以使用数据宏,或者其他系统通常称为表触发器的东西。
你不能在 2007 年。
请记住,您在这里使用的术语“保存表”是非常错误的。事实上,在大多数数据库的上下文中是非常错误的。用户不会“保存”表格。
您一次只能在数据表中编辑一行。当您移出该记录时,将保存 ROW(而不是表)。 ,如果您离开,则保存记录。
在 2010 年及以后,您可以使用表过程代码。因此,这将允许使用表触发器。
所以 2010 及更高版本确实支持表触发器和存储过程代码。但是由于您的问题包括 Access 2007,所以我建议使用表触发器(称为数据宏)可能不起作用,除非您可以将用户限制在 2010 年及以后。
在下面的示例中,当用户更新一行时,“审计”表将使用用户信息进行更新。 fosusername() 函数实际上是一个 VBA 函数。此代码是从表的更改前更新事件中调用的。
当然,这里的问题是您的问题的非常基础是假设用户保存了一个表——他们没有,他们编辑 + 保存“单个”记录,或者一次保存一行。因此,弄清楚用户是如何完成的肯定是一个挑战。因此,虽然代码可以在用户编辑数据时运行,但让表代码在用户关闭表时运行是不可能的。
一天结束时,最好创建一个看起来像表格的数据表,然后更改一些设置以“锁定”并阻止用户直接使用表格。
【解决方案2】:
据我所知,如果不使用表单,则无法解决此问题。我不知道实际数据表的事件(如更改或脏事件)。
在表单中,您可以使用脏属性来确保您获取数据。您可以使用DoCmd.RunCommand acCmdDatasheetView 使表单看起来像一个数据集,或者将表单设置为默认的数据表视图。