powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Логирование изменений в таблице Access 2010
34 сообщений из 34, показаны все 2 страниц
Логирование изменений в таблице Access 2010
    #39264528
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, добрый день!
Есть задача - отслеживать изменение данных в таблице, т.е если изменены были несколько полей таблицы, то и в ЛОГ должны попасть эти данные несколькими полями. В таблице 50 столбцов.
Возможные столбцы таблицы ЛОГА:
Код юзера
Дата изменения
Столбец
Тип изменения
старое значение
новое значение

Как это можно организовать? Буду рад любой помощи, заранее спасибо!
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39264532
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
опечатался)
Есть задача - отслеживать изменение данных в таблице, т.е если изменены были несколько полей таблицы, то и в ЛОГ должны попасть эти данные несколькими СТРОКАМИ. В таблице 50 столбцов.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39264542
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-,

для Access 2010 и выше появились макросы данных - Работа с макросами и выражениями в Access 2010
для более старых версий - Злоумышленник.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39264665
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, спасибо! Буду копать)
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39268989
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, странно, не могу у себя в Accesse 2010 найти макросы данных(
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39269271
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-, действительно странно. До этих макросов можно дойти, по крайней мере, двумя способами.
1. Открываешь таблицу в конструкторе, вкладка "Работа с таблицами. Конструктор.Создать макросы данных"
2. Открываешь таблицу, вкладка "Работа с таблицами. Таблица." тут кнопки с макросами данных.

Небольшой пример логирования.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39269454
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, спасибо, прям то что надо мне)
Только я не понимаю, где же увидеть этот макрос данных в твоей базе? куда он спрятан?)))
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39269459
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, нашел) спасибо еще раз)
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39269474
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, еще вопрос - как добавить в лог название изменяемого столбца (поля) ?
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39269483
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, и еще вопрос, как в лог можно добавить Имя Юзера из постоянно открытой в БД формы?
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39269554
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-, пока ответить не могу, нет по рукой Access 2010. Только позже.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39270055
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург-SWAN-, пока ответить не могу, нет по рукой Access 2010. Только позже.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39270494
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПанургПанург-SWAN-, пока ответить не могу, нет по рукой Access 2010. Только позже.

эх, немного не то( у меня 50 столбцов в таблице и желательно сделать лог по всем. В таблице Лога есть поле "название столбца" - вот туда мне бы и хотелось добавлять данные "столбец1" "столбец2" и тд.
И есть еще постоянно открытая скрытая форма в которой хранится ИмяЮзера, который открыл БД, вот ее я тоже хочу добавить в лог, чтобы знать кто изменил\удалил данные.
Но все-равно, спасибо за помощь!
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39270516
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-, ну насколько мне помнится в таблицу добавляется и название поля и название таблицы где произошло изменение. Там единственно только пользователь, который внёс изменения не доделан.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39270525
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургТам единственно только пользователь, который внёс изменения не доделан.А не доделан потому, что у макросов нет способа получить имя пользователя (или они мне не известны пока), ни у системы, ни у БД, и с VBA контакт практически отсутствует. Если только попробовать передавать через TempVars...
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39270565
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,

Элементарно макросы могут получать что угодно. Там можно использовать функции из общих модулей. У меня макросы пишут полную информацию о пользователе, базе, режиме базы и т.п.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39270571
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совет по макросам, которые логируют изменения: в самом начале проверяйте через функцию состояние переменной, которая "включает" макросы (просто собственная глобальная переменная). Это пригодится для массового апдейта больших таблиц - при выключении скорость возрастает в несколько раз и не пишется ненужная информация.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39270588
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin, а ты пробовал увидеть эти функции из макросов в Access 2010? У меня из макросов (и не только) видны только общие функции да и то не все.

умные все стали...
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39271437
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,

Не понял, в чем проблема с функциями. Естественно, пробовал, все это работает на многих серьезных проектах. Вот, пожалуйста, ниже скришот типичного Before Change дата макро, который выззывает функции. Вот сами функции:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Dim gstrOperationMode As String
Public gbolDataNacroDisabled As Boolean
Public gintEmployeeID       As Integer

#If Win64 Then
    Public Declare PtrSafe Function GetUserNameAPI Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#Else
    Public Declare Function GetUserNameAPI Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If


Public Function IsDataMacroDisabled() As Boolean
    IsDataMacroDisabled = gbolDataNacroDisabled
End Function

Public Function GetFullUserInfo() As Variant
    GetFullUserInfo = "OSUser=" & GetOSUserName() & "|DBUser=" & GetDBUserName() & "|OperationMode=" & GetOperationMode()
End Select
End Function

Public Function GetOSUserName() As String
    Dim strLen As Long
    Dim strtmp As String
    Dim strUserName As String

    strLen = 255
    strtmp = Space(256)
    GetUserNameAPI strtmp, strLen
    strtmp = Left$(strtmp, InStr(strtmp, Chr(0)) - 1)
    
    GetOSUserName = strtmp
End Function

Public Function GetDBUserName() As String
      GetDBUserName = Nz(DLookup("DisplayName", "Employees", "[ID_Employee] =" & gintEmployeeID))
End Function

Public Function GetOperationMode() As String
     GetOperationMode = gstrOperationMode
End Function



Хочу обратить внимание. что модуль с этими функциями должен быть продублирован в обеих частях разделенной базы, т.к. дата макро "видят" функции только из текущей Codebase, т.е. если эти функции находятся только в бэкэнде, то макросы будут работать нормально только если открыть бэкэнд и там попробовать поменять данные. При редактировании из фронтенда функция должна быть объявлена как глобальная в самом фронтэнде.
Раньше я выносил функции для работы с датамакро в отдельную библиотеку и подключал ее в обеим частям базы данных, но потом просто стал копировать, т.к. редактировать данный непосредственно из бэкэнда приходится довольно редко, и то только разработчику.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39271574
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShin...Не понял, в чем проблема с функциями...С макросами не работал и не обращал внимания, на то, что у меня в Access 2010 невидны из конструктора макросов многие функции VBA и все пользовательские.
Возможно, это система безопасности шалит... А может установка косячная...
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39271597
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,
База должна быть в Trusted каталоге и подключены нужные референсы. Ни один из моих многих клиентов не жаловался на проблемы с макросами.
Если есть пример, могу попробовать запустить его у себя или выложить свой заведомо рабочий пример. Если не заработает, то проблемы с установкой.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39271631
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinБаза должна быть в Trusted каталогеДа, дело, по-видимому, в этом. Чуть позже проверю.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39281809
AsyaL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро, у меня при попытки сохранить макрос выдает ошибку компиляции, говорит ошибка синтаксиса в модуле VB, не нравится ему Updated('Text_'), подскажите в чем может быть проблема, как ее решить?
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39281905
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AsyaL, а где ты используешь Updated - в макросе или коде VBA?
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39281920
AsyaL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, в макросе, главное все работает в примере который вложен втопике, но стоит начать с моей таблицей работать, все гитлер капут
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39281921
AsyaL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ставила и ковычки, и убирала скобки, не получается и все, при этом в том варианте спокойно сохраняет и компилирует
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39281959
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AsyaL,

А что это за макро такое? Updated доступно в Before Change и After Update макросах, а вы, похоже, делаете просто именованый датамакро, там эта функция не работает
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39281967
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только что проверил, нормально работает. Имя поля просто брал в двойные кавычки
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39281993
AsyaL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,
на той базе, что прикреплена у меня тоже работает, делают тот же алгоритм для свое базы, выдает сразу ошибку.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39282013
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AsyaL,

Что-то мне сдается, что дело может быть не в Update. Проверил, компилируется и в обычном датамакро, работает, если этот датамакро вызвать из событийного датамакро. Проверяйте другие шаги путем удаления
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39282092
AsyaL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, спасибо за советы, заработало, удалила триггер бенедикта и заработало.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39284796
oleksandr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПанургПанург-SWAN-, пока ответить не могу, нет по рукой Access 2010. Только позже.

здравствуйте! подскажите пожалуйста, как сделать так, чтобы в историю записывались только реально измененные записи? то если в ячейке удалить символ , а потом на его месте поставить тот же самый - идет добавление в историю... как этого избежать? запись по факту не изменилась... можно конечно сравнивать старое значение с новым через блок если, но это сильно "круто".

например на VBA эта проверка делается через "If Me.Dirty Then"
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39284874
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oleksandr2015например на VBA эта проверка делается через "If Me.Dirty Then"Вообще-то там есть проверка на изменение.

oleksandr2015можно конечно сравнивать старое значение с новым через блок если, но это сильно "круто".А что в этом "крутого"?
Ты думаешь там по мановению волшебной палочки делается? Программируй ту логику, которая тебе нужна.
...
Рейтинг: 0 / 0
Логирование изменений в таблице Access 2010
    #39285106
oleksandr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, понял, спасибо.
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Логирование изменений в таблице Access 2010
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]