Как регистрировать изменения в моей базе данных access с помощью VBA?
У меня есть база данных доступа для сотрудников, и некоторые пользователи с уровня менеджера имеют доступ к этой базе данных. Я хочу регистрировать любые изменения (добавлять новые,редактировать,удалять) в базу данных с помощью кода vba.пользователи будут использовать формы для внесения изменений. Я пробовал использовать приведенный ниже код,но проблема в том, что приведенный ниже код работает только для автономной формы. Мои формы содержат подформы и навигационные формы.
Что я уже пробовал:
Option Compare Database Public Function auditchanges(recordid As String, useraction As String) On Error GoTo auditerror Dim DB As Database Dim rst As Recordset Dim clt As Control Set DB = CurrentDb Set rst = DB.OpenRecordset("select * from audittrail", adOpenDynamic) userlogin = getuserlogon() Select Case useraction Case "new" With rst .AddNew ![DateTime] = Now() ![username] = userlogin ![FormName] = Screen.ActiveForm.Name '![FormName] = Screen.ActiveForm.ActiveControl.Name ![Action] = useraction ![recordid] = Screen.ActiveForm.Controls(recordid).Value .Update End With Case "delete" With rst .AddNew ![DateTime] = Now() ![username] = userlogin ![FormName] = Screen.ActiveForm.Name '![FormName] = Screen.ActiveForm.ActiveControl.Name ![Action] = useraction ![recordid] = Screen.ActiveForm.Controls(recordid).Value .Update End With Case "edit" 'For Each clt In Screen.ActiveForm.Controls For Each clt In Screen.ActiveForm.ActiveControl.Form If (clt.ControlType = acTextBox Or clt.ControlType = acComboBox) Then If Nz(clt.Value) <> Nz(clt.OldValue) Then With rst .AddNew ![DateTime] = Now() ![username] = userlogin '![FormName] = Screen.ActiveForm.Name ![FormName] = Screen.ActiveForm.ActiveControl.Form.Name ![Action] = useraction '![recordid] = Screen.ActiveForm.Controls(recordid).Value '![recordid] = Screen.ActiveForm.ActiveControl.Form(recordid).Value ![recordid] = Screen.ActiveForm.ActiveControl.Form(recordid).Value ![FieldName] = clt.ControlSource ![OldValue] = clt.OldValue ![NewValue] = clt.Value .Update End With End If End If Next clt End Select rst.Close DB.Close Set rst = Nothing Set DB = Nothing auditerror: 'MsgBox Err.Number & ":" & Err.Description, vbCritical, "Error" Exit Function End Function
CHill60
Почему вы не можете вызвать функцию из подформ?
muneermohd9690
на самом деле я новичок в vb.это небольшой проект, над которым я работаю после просмотра стольких видео на youtube.поэтому я не знаю, можно ли вызвать функцию из подформы, которую я пытаюсь проверить.при необходимости я могу поделиться базой данных.
CHill60
Вы не можете поделиться базой данных там, где я могу получить к ней доступ с работы.
Кстати, небольшая поправка - это не VB, а VBA. Похоже, но все же совсем другое дело. Кроме того, видео на YouTube, если они не представлены в виде сводного курса, не являются хорошим способом изучения языка.
Откуда вы вызываете эту функцию в данный момент? Предположительно, ваши подформы имеют кнопки "ОК", чтобы указать, что вы хотите зафиксировать изменения?
muneermohd9690
https://www.dropbox.com/s/kaw7j17bheurs2x/empsystem_backup_270920201111111.accdb?dl=0
you can access the database using the above link.this was created on access 2019.i am calling the function from the subform where i need to do the auditing.yes i do have a save and delete button on the form.i need to audit any changes when save or delete pressed,which works actually when the form is opened as a a standalone form.but once i publish it to users they will only be able to access it using navigation forms which will contain the form as a sub form.adding a new record is on another form.later on i need to call the same function on this adding new record form as well.you can start from loginscreen form once you download the database.the username would be khalifa and password 1234.
CHill60
Нет. Я не могу получить доступ к базе данных по этой ссылке. Как я уже сказал, "Вы не можете поделиться базой данных в любом месте, где я могу получить к ней доступ с работы."
Просто поместите вызов функции аудита в код для кнопок сохранить, удалить, после того как вы сделали сохранение или удаление
Gerry Schmitz
Если бы у вас был общий "уровень доступа к данным" (DAL), вы бы не беспокоились о формах против подформ против консоли и т. д. DAL будет выполнять операции с БД и ведение журнала, учитывая объект "отправитель".
muneermohd9690
это база данных access с некоторыми небольшими кодами vba для удовлетворения функциональности управления записями сотрудников небольшого офиса.