我需要 Access 2010 中的“跟踪更改”功能。我遇到了这个脚本,它应该可以通过一些工作来解决问题。
它清晰易懂,但还不能处理我需要的所有文本框案例。(稍后我将实现其他控件。)这是所编写的相关结构。它被称为表单上的更新前事件的事件过程:
Const cDQ As String = """"
Sub AuditTrail(frm As Form, recordid As Control)
'Track changes to data.
'recordid identifies the pk field's corresponding
'control in frm, in order to id record.
Dim ctl As Control
Dim varBefore As Variant
Dim varAfter As Variant
Dim strControlName As String
Dim strSQL As String
On Error GoTo ErrHandler
'Get changed values.
For Each ctl In frm.Controls
With ctl
'Avoid labels and other controls with Value property.
If .ControlType = acTextBox Then
If .Value <> .OldValue Then
'Add record of change to logging table
End If
End If
End With
Next
Set ctl = Nothing
Exit Sub
ErrHandler:
'Handle error
End Sub
只要文本框中的值不为空,这将起作用。如果其中一个.Value
or.OldValue
为空(或什么都没有——我在这一点上感到困惑),那么不等式就会失败。
我尝试将其中的部分更新With ctl
为以下内容。这允许我记录其中一个值(之前或之后)为空的更改。其余被注释掉的东西是我尝试记录值为空但没有改变的所有情况。换句话说,IsNull(ctl)
让一切都通过,但我不知道如何再次过滤掉平等的情况。
If .ControlType = acTextBox Then
If IsNull(ctl) Or .Value <> .OldValue Then
'If Not (Len(.Value & vbNullString) = 0 And Len(.OldValue & vbNullString) = 0) Then
'If oldValueIsNull Then
' varBefore = "--NULL--"
'Else
' varBefore = .OldValue
'End If
'If newValueIsNull Then
' varAfter = "--NULL--"
'Else
' varAfter = .Value
'End If
'Add record of change to logging table
'End If
End If
End If
任何帮助表示赞赏。