Автор: Mike Goblin, mgobin@mail.ru
Итак, остался всего один компонент на закладке 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