Как добавить Имя таблицы измененной записи вместе с типичным AuditTrail в MS Access - PullRequest
0 голосов
/ 19 октября 2018

Я использую Audit Trail, который прекрасно работает.У меня есть следующий код:

Sub AuditChanges(IDField As String, UserAction As String)
On Error GoTo AuditChanges_Err
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim ctl As Control
Dim datTimeCheck As Date
Dim strUserID As String
Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open "SELECT * FROM tblAuditTrail", cnn, adOpenDynamic, adLockOptimistic
datTimeCheck = Now()
strUserID = Environ("USERNAME")
Select Case UserAction
    Case "EDIT"
        For Each ctl In Screen.ActiveForm.Controls
            If ctl.Tag = "Audit" Then
                If Nz(ctl.Value) <> Nz(ctl.OldValue) Then
                    With rst
                        .AddNew
                        ![DateTime] = datTimeCheck
                        ![UserName] = strUserID
                        ![FormName] = Screen.ActiveForm.Name
                        ![Action] = UserAction
                        ![RecordID] = Screen.ActiveForm.Controls(IDField).Value
                        ![FieldName] = ctl.ControlSource
                        ![OldValue] = ctl.OldValue
                        ![NewValue] = ctl.Value
                        .Update
                    End With
                End If
            End If
        Next ctl
    Case Else
        With rst
            .AddNew
            ![DateTime] = datTimeCheck
            ![UserName] = strUserID
            ![FormName] = Screen.ActiveForm.Name
            ![Action] = UserAction
            ![RecordID] = Screen.ActiveForm.Controls(IDField).Value
            .Update
        End With
End Select
AuditChanges_Exit:
On Error Resume Next
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
Exit Sub
AuditChanges_Err:
MsgBox Err.Description, vbCritical, "ERROR!"
Resume AuditChanges_Exit

End Sub

Единственная проблема, с которой я столкнулся, состоит в том, что у меня есть несколько таблиц, каждая из которых использует автономные номера в качестве первичных ключей.В журнале аудита регистрируется один и тот же RecordID как для моей компании, так и для моего сотрудника;например, и я не могу различить, что было обновлено.Мне нужно зарегистрировать фактическое имя таблицы, где был получен RecordID.Другими словами, если RecordID 123 был обновлен, я хочу, чтобы Audit Trail сообщал мне, что это был первичный ключ из таблицы EmployeeT.

Как я могу настроить приведенный выше код для захвата имени таблицы?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Perkins,

Я не смог найти эту ссылку о том, как пометить вас.Я надеюсь, что вы получите это, или кто-то другой может помочь мне.Теперь поймите, что вы имели в виду под вопросом о коде, вызывающем что-то.Я считаю, что этого не хватало:

Опция сравнения базы данных

Private Sub Form_AfterDelConfirm(Status As Integer)
If Status = acDeleteOK Then Call AuditChanges("ProjectID", "DELETE")

End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then
    Call AuditChanges("ProjectID", "NEW")
Else
    Call AuditChanges("ProjectID", "EDIT")
End If
End Sub

Это код, размещенный в каждой форме, где я хочу отслеживать изменения.Изменения отслеживаются только в тех элементах управления, где я добавил «Audit» в свойство Tag.Любое изменение в этих элементах управления использует указанные выше вызовы для использования модуля, который я впервые опубликовал, который затем записывает данные в мой AuditTableT.

Он просто не записывает достаточно данных ... Я также хочу, чтобы он записал TableName, гдеданные из, а не только из FormName, и данные изменяются.Я понятия не имею, что делать с кодом, набранным Versteher.Будет ли это в модуле или в кодировке вызовов, которые я разместил в этом ответе?

0 голосов
/ 19 октября 2018

Вы можете Получить исходную таблицу связанного элемента управления с

ctl.Parent.Recordset.Fields(ctl.ControlSource).SourceTable

OldValue / NewValue - это мемо-поля?Если нет, позаботьтесь о контрольных полях памяти.

А как насчет элементов управления подчиненной формы?

...