ник: -)LKA(-
Вот на сайте sql.ru есть очень интересный пример от Бенедикта, вот краткое описание:
На таблицу A(Id,fTxt,fDbl,fDat) накладывается условие проверки (CONSTRAINT CHECK), которое построено таким образом, что для каждой обрабатываемой им записи вызывается VBA-функция TriggerA(). Условие проверяется автоматически при изменении и добавлении записей в таблицу A. В функцию передаются параметрами новые (точнее, проверяемые) значения полей таблицы A. Функция открывает таблицу-журнал Audit_A и добавляет в неё запись, содержащую
# Время изменения (вызова функции Trigger_A()) в поле LogTime
# Имя компьютера в поле Audit_A.ComputerName
# Имя пользователя в поле Audit_A.UserName
# Значение ключевого поля A.Id в поле Audit_A.A_Id
# Новое значение поля A.fTxt в поле Audit_A.NewTxt
# Новое значение поля A.fDbl в поле Audit_A.NewDbl
# Новое значение поля A.fDat в поле Audit_A.NewDat
# Старое значение поля A.fTxt в поле Audit_A.OldTxt
# Старое значение поля A.fDbl в поле Audit_A.OldDbl
# Старое значение поля A.fDat в поле Audit_A.OldDat
Условие проверки накладывается запросом CreateTrigger, снимается запросом DropTrigger
Запросы Запрос1 и Запрос2 даны, чтобы показать, что условие проверки срабатывает (и, соответственно, изменения попадают в журнал) не только при ручном редактировании записей таблицы A, но и в результате выполнения запросов на обновление и добавление. Их (вместе и по отдельности) можно вызывать или не вызывать. Они имитируют запросы на обновление и добавление реальной БД.
P.S.
Таблица Audit_A скрыта Изменения фиксируются независимо где были сделаны, напрямую в таблице или через форму.