excel - 通过 Excel 用户窗体编辑 Access 数据库时跟踪更改(创建审计跟踪)
问题描述
我正在从 Excel 数据库转移到 Access 数据库以支持多用户输入。我有 excel 用户表单,我用它来添加和更新存储在共享点中的 Access 数据库。我想在数据库中的单独表中跟踪此数据库中的所有更改,以维护审计跟踪以供以后查看。
这是一个示例更新函数:
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 作为数据库时,我还使用了一个 Log Changes 函数。这是功能:
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 和标题来更新审计跟踪表。我似乎无法在这里实现此方法。请帮忙
解决方案
推荐阅读
- visual-studio - m_safeCertContext 是一个无效句柄 - 为什么我的代码在生产环境中有效,但在开发环境中无效?
- google-sheets - 如何让单元格中的值改变一天中的时间和日期的条件?
- ios - node_modules/react-native-vector-icons/lib/create-icon-set.js: #
无法克隆 - perl - Perl中变量名中的单引号?
- keras - Keras Sequence ImageDatagenerator 在一个数组和两个数组中返回 X,y 时的性能差异
- javascript - 如何将变量传递给箭头函数?
- javascript - NFoxygenD3.js:4 未捕获的进度事件
- prolog - 在序言中找到与团队相同的球员
- excel - 尝试在自动筛选后选择 DataBodyRange 中的可见单元格时,“工作表类的选择方法失败”
- macos - 在 Mac M1 上的特定位置安装 chromedriver?