Access数据库中如何获取已更改的记录详细信息

Posted

技术标签:

【中文标题】Access数据库中如何获取已更改的记录详细信息【英文标题】:How to get the record details which has been changed in Access database 【发布时间】:2012-04-17 14:22:59 【问题描述】:

我有一个 Access 数据库,其中包含许多表和数千条记录,如果有人更改其中的任何数据、任何行,甚至只是一个单元格,是否有任何方法可以了解特定的行或单元格有什么在 Access 数据库中更改了任何属性还是应该使用任何触发器?

【问题讨论】:

我相信触发器出现在 2010 年。因此,您唯一的选择是手动比较新旧(beforePost 事件?)。说用触发器来做这件事也不是特别聪明。在任何地方进行任何更改,无论是否访问,都将很快在一个重要的系统上积累大量数据。你想解决什么问题,横向思考时间。 实际上主要是如果编辑任何特定行,而不是上传整个数据库,如果我只上传特定更改的行或表会很有帮助,以某种方式通过编辑行,可以你建议我这样做 一些 RDBMS 有“行更改时间戳”的概念,但我不知道访问是否支持本机。您可以在应用程序级别做一些事情,也许,以获得效果 - 然后,只需上传自上次更新以来的所有内容。但是,如果出现问题,交易可能会出现问题 - 您可能需要查看 ETL 工具。 我不建议使用副本数据库。我记得他们有些痛苦。 是的,时间戳属性可以在记录更改时更新。您可以使用 before change table 事件在引擎级别运行代码(您需要 a2010 来执行此操作)。事实上,如果应用程序不会被其他任何东西更新,那么您甚至可以记录当前登录的窗口用户名以及计算机工作站名称。因此,您可以记录网络用户名、计算机名和日期/时间。如果您没有 2010,则必须在更新事件之前将此类代码放在表单中。 【参考方案1】:

几年前,我在使用 MSSQL DB 时遇到了类似的问题,我似乎记得 ACCESS (MDB) 和 SQL (MDF) 数据库都不是天生支持这个的。如果我没记错的话,你将不得不采用这些原则:

1) 交易数据不应该被修改,只能参考历史记录,新记录包含改变的值。我从三个角度拍的:

我有一个名为 PrecursorRecId 的列,其中包含 与更新相关的最新记录。 保存的另一列和 Context_ID 下所有相关记录 由一个公共值链接,该值是 AuditTxnContext 表。 记录的 TxnDate(非常合乎逻辑)

2) 主数据记录也未更改,但每条记录都有 EffectiveFromDate 和 EffectiveToDate,其中 EffectiveToDate 为 NULL 的记录被视为当前记录。根据表的敏感性,MaterData 记录的创建伴随着审计条目记录。同样,有一个 RecordCreatedDateTime 不会自动匹配 EffectiveFromDate 戳。

这可能会帮助您继续前进,但对您现有的数据没有太多帮助。我也不太清楚你在做什么,所以我的意见相当笼统。我希望它有任何帮助。如果我有错误,我欢迎任何人提出意见,这就是我们应对挑战的方式。

如果您仍在处理它,请告诉我更多信息。如果没有,请关闭您的问题。

干杯

苹果机

【讨论】:

以上是关于Access数据库中如何获取已更改的记录详细信息的主要内容,如果未能解决你的问题,请参考以下文章

领域:记录顺序已更改

MS Access -“自从您开始编辑此记录以来,该记录已被其他用户更改”

如何从一个表中获取包含另一表的详细信息的记录计数

您不具有对数据库的独占访问权限这一次。如果继续进行更改,您可能无法将其保存

QTreeView:如何中止选择更改

如何在网页开发中获取图层操作的信息?