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

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

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

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

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

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

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

Не понял, в чем проблема с функциями. Естественно, пробовал, все это работает на многих серьезных проектах. Вот, пожалуйста, ниже скришот типичного 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
11.07.2016, 08:46
    #39271574
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование изменений в таблице Access 2010
MrShin...Не понял, в чем проблема с функциями...С макросами не работал и не обращал внимания, на то, что у меня в Access 2010 невидны из конструктора макросов многие функции VBA и все пользовательские.
Возможно, это система безопасности шалит... А может установка косячная...
...
Рейтинг: 0 / 0
11.07.2016, 09:28
    #39271597
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование изменений в таблице Access 2010
Панург,
База должна быть в Trusted каталоге и подключены нужные референсы. Ни один из моих многих клиентов не жаловался на проблемы с макросами.
Если есть пример, могу попробовать запустить его у себя или выложить свой заведомо рабочий пример. Если не заработает, то проблемы с установкой.
...
Рейтинг: 0 / 0
11.07.2016, 10:31
    #39271631
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование изменений в таблице Access 2010
MrShinБаза должна быть в Trusted каталогеДа, дело, по-видимому, в этом. Чуть позже проверю.
...
Рейтинг: 0 / 0
28.07.2016, 12:30
    #39281809
AsyaL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование изменений в таблице Access 2010
Доброе утро, у меня при попытки сохранить макрос выдает ошибку компиляции, говорит ошибка синтаксиса в модуле VB, не нравится ему Updated('Text_'), подскажите в чем может быть проблема, как ее решить?
...
Рейтинг: 0 / 0
28.07.2016, 14:07
    #39281905
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование изменений в таблице Access 2010
AsyaL, а где ты используешь Updated - в макросе или коде VBA?
...
Рейтинг: 0 / 0
28.07.2016, 14:14
    #39281920
AsyaL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование изменений в таблице Access 2010
Панург, в макросе, главное все работает в примере который вложен втопике, но стоит начать с моей таблицей работать, все гитлер капут
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Логирование изменений в таблице Access 2010 / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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