|
Mike Goblin
Итак, остался всего один компонент на закладке 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 вышеуказанной структуры.
Литература по Btrieve
|