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


8

Я поддерживаю базу данных Access для некоммерческой организации. У нас есть некоторые проблемы с данными, таинственным образом изменяющимися, и были некоторые, дружеские споры о том, вызвано ли это пользователями, которые не являются самыми компьютерными или моими фоновыми обработчиками.

Я добавил некоторые проверки на уровне пользовательского интерфейса для этих условий, но я хотел бы поставить некоторые проверки на уровне таблицы базы данных, чтобы регистрировать изменения определенных полей. Таким образом, я узнаю об изменении, было ли оно инициировано пользователем или просто из запроса на обновление, выполняющегося в фоновом режиме. Обычно я бы использовал on updateтриггер, но, насколько мне известно, Access не поддерживает триггеры. Существуют ли какие-либо другие функции журналирования или триггера в Access?

Ответы:


4

К сожалению, Microsoft Access не имеет триггеров или чего-либо, что напоминает триггеры. Вдобавок ко мне, у вас есть пара непривлекательных вариантов:

  • Создайте DateModifiedи UserModifiedстолбцы, и обновите свой код, чтобы включить эти значения. Недостатком является то, что вы будете знать только последнего человека, который обновил запись, и у вас не будет истории, чтобы посмотреть на нее ..
  • Сохраните интерфейс доступа и перенесите таблицы на сервер SQL Server Express. Таким образом, вы сможете использовать триггеры (а также резервные задания и другие приятные вещи).

4

В дополнение к методу LittleBobbyTables, существует третий вариант, который включает в себя создание _auditтаблицы для каждой обычной таблицы и написание целой лотосной логики для их поддержки, так что, когда все меняется, вы вставляете запись в эти таблицы для этого. (вы уже знаете, когда сохраняете / обновляете / удаляете записи, да?)

Конечно, это то, как это делают «большие базы данных», недостатком здесь является множество логики, которую вы должны делать вручную, чтобы имитировать работу триггерного типа на сервере.


4

Обратите внимание, что, например, SQL Server Express является бесплатным и потенциально может быть заменой Access. Это даст вам функциональность аудита, которая вам нужна. Я не думаю, что подход «таблица аудита» является жизнеспособным; Предполагается, что любой, кто подключается к базе данных, делает это через «официального» клиента, который имеет эту логику. С помощью триггеров невозможно получить данные без их запуска с любого случайного клиента.

Третий вариант - Wireshark или аналогичный, чтобы фактически наблюдать за трафиком между клиентом и базой данных (я предполагаю, что на самом деле это будет не TDS, а протокол обмена файлами?), Тогда вы можете точно узнать, кто что делает, когда и с какой машины. Недостатком этого является то, что для анализа требуется много памяти, некоторые сценарии, что может повлиять на производительность.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.