如何解决通过Excel用户窗体编辑Access数据库时跟踪更改创建审计跟踪
我正从Excel数据库转移到Access数据库,以支持多用户输入。 我有用于添加和更新存储在sharepoint中的Access数据库的excel用户窗体。我想在数据库的一个单独的表中跟踪该数据库中的所有更改,以维护审核跟踪以供以后查看。
这是示例更新功能:
Sub Edit()
Application.displayAlerts = False
Application.ScreenUpdating = False
Application.AutomationSecurity = msoAutomationSecurityLow
Dim cnn As New ADODB.Connection 'dim the ADO collection class
Dim rst As New ADODB.Recordset 'dim the ADO recordset class
Dim dbPath As String
Dim qry As String
dbPath = "Share-point UNC path"
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Jet OLEDB:Database"
Set rst = New ADODB.Recordset 'assign memory to the recordset
qry = "SELECT * FROM FileNumbers WHERE [File_Number]= '" & EditForm.txtFile.Value & "'"
rst.Open qry,cnn,adOpenKeyset,adLockOptimistic
With rst
.Fields("Archival_id").Value,EditForm.txtArchival.Value
.Fields("Remarks").Value,EditForm.txtRemarks.Value
.Fields("Retention Category").Value,EditForm.cmbRetention.Value
.Update
End With
rst.Close
cnn.Close
Set rst = nothing
Set cnn = nothing
End Sub
我想在一个单独的表中跟踪更改,如下所示:
我可以轻松地记录“编辑依据”,编辑日期和时间以及新值。我在记录旧值和编辑的参数时遇到麻烦,这些值将成为“文件编号”表中的列名
当我使用Excel作为数据库时,我还使用了“日志更改”功能。这是功能:
Sub LogChanges(c As Range,vNew)
With c
sep = IIf(Len(titles) > 0,"; ","") 'need a separator?
If .Value <> vNew Then
'track the changes
titles = titles & sep & .Parent.Cells(1,.Column).Value 'column titles in Row1
oldValues = oldValues & sep & ValueOrBlank(.Value) 'track old value
newValues = newValues & sep & ValueOrBlank(vNew) 'track new value
.Value = vNew 'update the cell
End If
End With
End Sub
Function ValueOrBlank(v)
ValueOrBlank = IIf(Len(v) > 0,v,"[blank]")
End Function
然后,我使用变量,oldValues,newValues和标题来更新审计跟踪表。我似乎无法在这里实现此方法。请帮忙
解决方法
您不应在前端实现审计跟踪之类的功能(用户窗体或数据对象)。这些东西属于后端(数据库)。前端不应该在意数据如何存储以及是否存在审计跟踪的事实。
在数据库上,通常使用一种称为 trigger 的机制。触发器是一种在数据库事件(例如插入或更新命令)的情况下运行的脚本。在这样的触发器中,您可以实现审核跟踪逻辑。
现在在Access中,这些机制的名称不是触发器,而是 data宏,但基本上是相同的想法。我在Access on SO上发现了这个answer about trigger ,它基本上与Microsoft关于data macros的官方文档有关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。