每当在表单上删除或更新记录时,我想将其旧值保存在历史记录表中(让我们称之为修订版)。我想我必须做以下事情:
记录更改:
删除:
您是否有任何线索,评论或链接?
这一切都在“纯访问”(无SQL Server)中。
非常感谢!
编辑:像往常一样,正确地问这个问题会给我一些想法:
使用BeforeUpdate或OnDelete构建SQL语句,并使用AfterUpdate或AfterDelConfirm来执行SQL语句。但这不适用于多次删除?
将修订记录集定义为ta form level,插入记录“Before”但仅更新“After”。同样,多次删除的问题。
答案 0 :(得分:3)
我在几个不同的项目中成功使用了Allen Browne方法的变体。查看他的网站了解更多详情:
他的解决方案使用临时表和四个通用函数调用来处理多次删除的问题。
答案 1 :(得分:3)
我最近考虑过的另一种方法,即没有机会实际实施,将使用事务来执行更改跟踪。基本算法是:
更新/插入的类似方法。这样可以避免使用临时表/数组/集合等,但我还没有完全考虑过所有内容。魔鬼可能在细节中。
答案 2 :(得分:0)
可以为多个表实现的“简单”通用解决方案是拥有一个跟踪表,由以下内容组成:
Track_Table
==================================================
id_track as primary key
id_table as name of the table which has been updated
id_primaryKey as the record identifier (the PK of the updated record)
changeType, being either DEL or UPDATE
changeDate, as dateTime value
fieldName, as text
oldValue, as text or memo
newValue, as text or memo
如果您必须确定执行更新的用户,只需添加
即可userId
在你的桌子上......
然后,您可以在所选表单的beforeUpdate和afterUpdate事件上创建一些通用的“更新前”和“更新后的函数”。 beforeUpdate函数将旧值存储在变量中,而afterUpdate函数将填充缺失的数据并在轨道表中插入新记录。
您必须找到一种方法来找出正确的\相应的表名和字段名。如果您使用视图或字段别名在表单中显示数据,则可能会很困难。
当然,要遵循的所有表都必须具有主键,以便您可以跟踪记录级别的更改。在多个领域设置的PK肯定会有问题....
oldValues和newValues必须转换为文本,以便将它们存储在文本或备注字段中