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

8

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

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

BENV
источник

Ответы:

4

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

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

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

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

Jcolebrand
источник
4

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

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

Gaius
источник