Программное чтение журнала изменений

Здравствуйте.
Не могли бы вы объяснить, как работает механизм журнала изменений, и как правильно осуществить обращение к этим данным программно.

Нравится

3 комментария

Добрый день, Иван!

Работа механизма логирования достаточно сложна. Попытаюсь вкратце описать его работу.
Общие положения:
1. Механизм работает только для тех таблиц, в сервисах которых для таблицы и некоторых полей установлен признак "Отслеживать изменения". Обратите внимание, что признак нужно установить для таблицы и (обязательно) для некоторых полей.
2. При сохранении такой таблицы создается специальная таблица tbl_MyTableLog, в которой создаются все поля основной таблицы, плюс строковые поля для значений справочников. В этой таблице будут храниться старые значения записей. Ссылка на запись осуществляется по полю RecordID. В этой таблице также сохраняются удаленные записи.
3. Просмотр старых значений записи возможен в разделе в детали "Журнал изменений" либо в одноименном разделе. Самая "свежая" запись в спец.таблице не хранится, но отображается в журнале синим цветом (извлекается запросом с union из основной таблицы), чтобы пользователь мог видеть текущее значение записи.
4. Механизм работает для всех трех СУБД (MSSQL, Oracle, Firebird) и реализован на триггерах, поэтому срабатывает даже в случае работы с БД не из клиентского приложения. Запись сохраняется в истории только в случае, если было изменено хотя бы одно логируемое поле. Иначе запись в историю не попадает. В записях истории хранится информация о пользователях, создавших или изменивших запись, а также о дате-времени таких операций.
5. При необходимости обратиться к старым значениям необходимо создать запрос и набор данных для выборки таких значений. Сервис таблицы tbl_MyTableLog создается автоматически, запрос и набор данных создать несложно, отобразить все это в реестре или вывести в отчет - дело техники.
Думаю, на данном этапе информации достаточно.
Для освоения механизма рекомендую начать его исследование с простого примера, например, логировать таблицу какого-нибудь справочника.
Если возникнут вопросы - всегда рад помочь.

Спасибо за подробный ответ, разобрался. Правда, как я заметил, запрос sq_MyTableLog создается автоматически.

Да, совершенно верно, при сохранении логируемой таблицы сервисы tbl_MyTableLog и sq_MyTableLog, а также триггеры на основной таблице tbl_MyTable создаются автоматически.

Показать все комментарии