Использование SQLMonitor (DBExpress)
01.01.2007
Mike Goblin, mgoblin@mail.ru
Следи за собой - будь осторожен, или использование SQLMonitor.
Итак, остался всего один компонент на закладке dbExpress, не обследованный нами - это SQLMonitor. Как вы уже догадались, его задача - это протоколирование событий, происходящих в программе при обращении к базе данных. Протокол может выводиться как в StringList, так и файл.
Создадим новый проект (File/ New Application).
На главную форму положим SQLConection, SQLClientDataSet.
Настроим SQLConnection на соединение с БД, а SQLClientDataSet на получение данных через SQLConnection. Свойства
Connected SQLConnectionиActive SQLClientDataSetустановим вTrue. Все стандартно.Теперь положим на форму компонент - SQL Monitor.
Посмотрим, какими свойствами и событиями он обладает:- Active Boolean - Активность монитора - вкл/выкл
- AutoSave Boolean - Авто сохранение протокола в файл, имя файла должно быть указано в свойстве FileName
- FileName String - Имя файла для сохранения протокола.
Если свойство AutoSave установлено в true,
то в указанный файл протокол записывается автоматически,
если
AutoSave :=false, то FileName используется как файл по умолчанию, для методов LoadFromFile, SaveToFile - SQLConnection TSQLConnection - Соединение с БД, работа с которым будет протоколироваться
- TraceList TStrings - Содержимое протокола
Методы:
- LoadFromFile (AFileName:string) - Загрузить протокол из файла
- SaveToFile (AFileName:string) - Сохранить протокол в файл
События:
- OnLogTrace TTraceLogEvent - Генерируется сразу после вставки нового сообщения в протокол
- OnTrace TTraceEvent - Генерируется при наличии сообщения для протокола, перед его вставкой
Что нам остается сделать - в компоненте SQLMonitor1 установить свойство SQLConnection равным SQLConnection1, а затем свойство Active SQLMonitor1 установим в True.
Для вывода сообщений расположим на форме компонент Memo. Для его заполнения создадим обработчик события OnLogTrace компонента SQLMonitor1 со следующим кодом:
Memo1.Clear; Memo1.LinesAddString(SQLMonitor1.TraceList);Всё, запускаем полученное приложение - читаем протокол.
У меня возник по поводу использования монитора только один вопрос (Кто идет за "Клинским"? :)
А как отслеживать не все события, а только какие-то определенные? Ответ нашелся довольно быстро.
Структура CBInfo:pSQLTraceDesc имеет поле eTraceCat, содержащее
категорию произошедшего события. Однако у меня значение этого поля
всегда было равно 256. Таким образом, нам остается только анализировать
текст сообщения, находящийся в поле pszTrace вышеуказанной структуры.
Ну вот и все. Ваши замечания и предложения я рад буду увидеть в почтовом ящике mgoblin@mail.ru
Автор: Mike Goblin
Взято с сайта https://www.delphimaster.ru/
с разрешения автора.

