Надеюсь, кто-нибудь сможет указать вам направление уже существующей библиотеки, которая будет вести журнал за вас. В частности, если FireDAC является опцией, вы можете взглянуть на то, что здесь написано:
http://docwiki.embarcadero.com/RADStudio/XE8/en/Database_Alerts_%28FireDAC%29
Конечно, преобразование вашего приложения с использования Ado в FireDAC может быть не для вас вариантом, но в зависимости от того, насколько велики ваши потребности, вы могли бы извлечь специфический для Sql-Server метод оповещения о событиях, который использует FireDAC, в приложение Ado. Я кратко рассмотрел это некоторое время назад, и казалось, что это будет довольно просто.
До FireDAC я внедрил решение на стороне сервера, которое перехватывало вставки, обновления и удаления. Мне пришлось сделать это около 10 лет назад (для Sql Server 2000), и настроить его было довольно сложно.
В общих чертах это работало так:
Sql Server поддерживает то, что MS раньше называла «расширенными хранимыми процедурами», которые реализованы в пользовательских библиотеках DLL (в наши дни MS может называть их другим именем или даже прекратила их поддержку). Существуют библиотеки Delphi, которые предоставляют оболочку, позволяющую писать их в Delphi. Конечно, в наши дни, если ваш Sql-сервер 64-разрядный, вам необходимо создать 64-разрядную DLL.
Вы пишете расширенные хранимые процедуры для регистрации изменений любым удобным для вас способом, а затем пишете настраиваемые триггеры в базе данных для вставок, обновлений и удалений, которые передают данные строк, участвующих в ваших XSP.
По счастливой случайности моя потребность в этом отпала, как только я завершал проект, прежде чем я начал стресс-тестирование и профилирование производительности, но это действительно сработало.
Конечно, не в каждой среде вам будет разрешено/возможность устанавливать s/ware и запускать код на сервере Sql.
Для интереса вы также можете взглянуть на https://msdn.microsoft.com/en-us/library/ms162565.aspx, который предоставляет объект SMO для отслеживания активности Sql Server, хотя на данный момент он только 32-разрядный.
Ради развлечения я мог бы попробовать реализовать обработчик событий для объекта набора записей, лежащего в основе TAdoTable/TAdoQuery, который мог бы уловить изменения, которые вам нужны, но не задерживайте дыхание...
И, конечно же, если вас интересует только ведение журнала на стороне клиента, один из способов сделать это — написать обработчики событий AfterEdit, AfterInsert и AfterDelete вашего набора данных. Конечно, это не гарантирует, что изменения действительно будут применены на сервере, но может обеспечить точную запись активности пользователя, если этого достаточно для ваших нужд.
person
MartynA
schedule
27.01.2016