|
Вернуться к содержанию
Глава 24
Сервер баз данных InterBase и компоненты
InterBase Express
В Delphi 5 появилась новая страница Палитры компонентов,
содержащая компоненты доступа к данным, адаптированные для работы с сервером
InterBase. Компоненты из набора InterBase Express предназначены для работы с
сервером InterBase версии не ниже 5.5.
Их преимущество заключается в реализации всех
функций за счет прямого обращения к API InterBase. Благодаря этому существенно
повысилась скорость работы компонентов. Кроме этого, компоненты InterBase
Express не нуждаются в посредничестве BDE,
который замедляет работу самих компонентов и приложения в целом. Новые компоненты
предоставляют разработчику новые возможности.
- Улучшенное управление транзакциями (для этого
теперь предназначен отдельный компонент TiBTransaction).
- Новые компоненты доступа к данным, позволяющие
лучше решать очень распространенные задачи программирования (компоненты TiBDataSet,
TIBSQL).
- Возможность получения сведений о состоянии
базы данных без прямого обращения к ее системным таблицам (компонент TiBDatabaseinfo).
- Отслеживание состояния процессов выполнения
запросов (компонент TIBSQLMonitor).
С точки зрения разработчика, за исключением нескольких
новых свойств, методика использования этих компонентов в приложениях БД не отличается
от стандартной методики. Любой новый компонент, инкапсулирующий набор данных,
совершенно обычным образом через компонент TDataSource можно подключить к любому
стандартному компоненту отображения данных.
В этой главе рассматриваются следующие вопросы.
- Соединение с сервером InterBase и полноценное
управление транзакциями из клиентского приложения.
- Что изменилось в стандартных компонентах доступа
к данным.
- Назначение и возможности новых компонентов
доступа к данным.
- Отслеживание процессов выполнения запросов
на сервере из клиентского приложения.
- Оценивание состояния базы данных.
- Особенности переноса клиентских приложений,
работающих с сервером InterBase, на новую компонентную базу.
Механизм доступа к данным InterBase
Express
Напомним (гл. 21), что в клиентских приложениях
Delphi соединение с сервером БД осуществляет компонент TDatabase. Его аналогом
из набора InterBase Express является компонент TiBDatabase.
Так как новый механизм доступа к серверу существенно
отличается от стандартного, компонент TDatabase оказался разделенным на два:
TiBDatabase и TIBTransaction.
Ниже мы подробно рассмотрим эти компоненты, но
сначала кратко остановимся на самом механизме доступа к данным InterBase Express.
Напомним (гл. 21), что для создания клиент/серверного
приложения необходимо не только иметь работающий сервер, но и инсталлировать
на клиентских рабочих местах специальное программное обеспечение, выполняющее
соединение клиентского приложения с сервером.
Механизм доступа к данным InterBase Express использует
для обращений к серверу возможности клиентского ПО InterBase. Если с данного
компьютера доступны базы данных какого-либо сервера на платформе InterBase,
то рассматриваемые здесь компоненты могут обращаться к этому серверу. При этом
не требуется использовать BDE.
Но в результате все компоненты InterBase Express,
инкапсулирующие набор данных, должны обращаться к базе данных только через компонент
соединения TiBDatabase. На самом деле эта особенность не является недостатком
в клиентских приложениях, так как организация соединения через один специализированный
компонент всячески приветствуется и является хорошим тоном в программировании.
Компоненты InterBase Express в целях увеличения
скорости для выполнения всех функций (в том числе и для соединения) используют
API InterBase.
Компонент TiBDatabase
Так как для доступа к базе данных компонентам
InterBase Express не требуется BDE, то для создания соединения используется
всего одно свойство
DatabaseName. В нем необходимо указать полный
путь (включая имя сервера) к выбранному файлу БД с расширением gdb. При щелчке
на кнопке свойства в Инспекторе объектов для этого можно воспользоваться стандартным
диалогом выбора файла.
Компонент имеет собственный редактор, который
позволяет задать значения основных свойств, обеспечивающих соединение с базой
данных.
Настройка соединения проводится обычным способом
(см. описание компонента TDatabase). Для задания вводимых при подключении параметров
(имя пользователя, пароль, схема, роль и т. д.) используются свойства Params
И LoginPrompt (табл. 24.1).
Соединение включается и отключается свойством
connected. Свойство IdleTimer задает временной интервал до отключения неиспользуемого
соединения.
В компоненте TIBDatabase отсутствуют средства
управления транзакциями, которые вынесены в отдельный компонент TIBTransaction.
Свойство DefaultTransaction позволяет задать транзакцию по умолчанию. Изменяя
значение этого свойства, можно в одном соединении работать с несколькими транзакциями.
Свойство TraceFlags позволяет управлять сведениями
о выполнении запросов, возвращаемыми компонентом TSQLMonitor (см. ниже описание
этого компонента).
Таблица 24.1. Свойства и методы компонента
TiBDa tabase
|
Объявление
|
Тип
|
Описание
|
|
Свойства
|
|
property DatabaseName:
String;
|
Pb
|
Определяет имя базы данных
|
|
property
DefaultTransaction: TIBTransaction;
|
Pb
|
Указывает на компонент TIBTransaction, используемый
для работы с транзакциями в данном соединении
|
|
property IdleTimer: Integer;
|
Pb
|
Определяет временной интервал до автоматического
отключения неиспользуемого соединения
|
|
property IsReadOnly:
Boolean;
|
Pu,Rо
|
Позволяет определить, возможно ли редактирование
базы данных
|
|
property Params: TStrings;
|
Pb
|
Список параметров, передаваемых на сервер
при открытии соединения
|
|
property SQLDialect: Integer;
|
Pb
|
Задает используемый при работе с сервером
диалект SQL
|
|
type
|
Pb
|
Определяет набор операций, отслеживаемых
|
|
Property TransactionCount: Integer;
|
Pu, Ro
|
Возвращает число используемых транзакций
|
|
property Transactions
|
Pu,
|
Индексированный список компонентов тран
|
|
[Index: Integer]: TIBTransaction;
|
Ro
|
закций, используемых в данном соединении
|
|
Методы
|
|
function AddTransaction (TR: TIBTransaction): Integers-
|
Pu
|
Связывает с компонентом соединения новый
компонент транзакции
|
|
procedure ApplyUpdates (const DataSets: array of TIBCustomDataSet);
|
Pu
|
Передает на сервер изменения из наборов
данных,перечисленных в параметре
|
|
procedure CheckActive;
|
Pu
|
Проверяет состояние соединения. Если соединение
неактивно, вызов метода возвращает ошибку API InterBase
|
|
procedure CheckDatabaseName;
|
Pu
|
Проверяет имя базы данных. Если имя отсутствует,
вызов метода возвращает ошибку API InterBase
|
|
procedure Checklnactive;
|
Pu
|
Проверяет состояние соединения. Если соединение
активно, вызов метода возвращает ошибку API InterBase
|
|
procedure CloseDataSets;
|
Pu
|
Закрывает все наборы данных, связанные с
этим соединением, без прерывания соединения
|
|
procedure Create Database;
|
Pu
|
Создает новую базу данных для сервера InterBase.
Параметры новой базы необходимо задать в свойстве Params
|
|
procedure DropDatabase;
|
Pu
|
Уничтожает базу данных
|
|
function FindTransaction (TR: TIBTransaction): Integers-
|
Pu
|
Возвращает индекс компонента транзакции
в списке Transactions соединения
|
|
procedure ForceClose;
|
Pu
|
Закрывает соединение с сервером
|
|
procedure GetFieldNames (const TabieName: string; List: TStrings);
|
Pu
|
Возвращает в параметре List список полей
таблицы TabieName
|
|
procedure GetTableNames (List: TStrings; SystemTables: Boolean = False)
;
|
Pu
|
Возвращает в параметре List список таблиц
базы данных. Параметр SystemTables управляет включением имен системных
таблиц
|
|
function IndexOfDBConst (st: String): Integers-
|
Pu
|
Возвращает порядковый номер параметра БД
по его имени St
|
|
procedure RemoveTransaction (Idx: Integer);
|
Pu
|
Отключает компонент транзакции от соединения
|
|
Методы
|
|
procedure RemoveTransact ions;
|
Pu
|
Отключает все транзакции
|
|
procedure SetHandle;
|
Pu
|
Задает дескриптор базы данных
|
|
procedure TestConnected: Boolean;
|
Pu
|
Возвращает True, если соединение открыто
|
|
Методы-обработчики событий
|
|
property AfterConnect: TNotifyEvent;
|
Pb
|
Выполняется после открытия соединения
|
|
property AfterDisconnect:
TNotifyEvent;
|
Pb
|
Выполняется после закрытия соединения
|
|
property BeforeConnect:
TNotifyEvent;
|
Pb
|
Выполняется перед открытием соединения
|
|
property BeforeDisconnect:
TNotifyEvent;
|
Pb
|
Выполняется перед закрытием соединения
|
|
property OnDialectDowngradeWarni ng: TNotifyEvent;
|
Pb
|
Выполняется в случае изменения диалекта
SQL при открытии соединения
|
|
property OnIdleTimer: TNotifyEvent;
|
Pb
|
Вызывается по истечению времени, заданного
свойством idleTimer
|
|
TDatabaseLoginEvent = procedure (Database: TIBDatabase;
|
Pb
|
Вызывается для регистрации пользователя
при открытии соединения
|
|
LoginParams: TStrings) of object;
|
|
|
|
property OnLogin: TDatabaseLoginEvent;
|
|
|
Компонент TIBTransaction
Компонент TIBTransaction инкапсулирует средства
управления транзакцией для соединения с сервером InterBase. В целом, здесь управление
транзакциями не отличается от стандартных возможностей, рассмотренных в главе
21 "Механизм удаленного доступа". Рассмотрим дополнительные возможности.
Один компонент транзакции может работать с несколькими
базами данных одновременно. Для этого используется свойство DefaultTransaction
соответствующих компонентов соединения TIBDatabase (табл. 24.2).
При работе с сервером InterBase 6.0 можно использовать
методы CommitRetaining и RollbackRetaining.
в отличие от стандартных операций фиксации
и отката транзакций, эти методы после передачи или отмены изменений оставляют
текущую транзакцию открытой.
Если сервер перегружен и не откликается на транзакцию,
то после истечения времени, заданного свойством idleTimer, выполняется действие,
заданное свойством
type TTransactionAction = (taRollback, taCornmit,
taRollbackRetaining, taCommitRetaining);
property DefaultAction: TTransactionAction;
- taRollback — откат транзакции;
- taCornmit — фиксация транзакции;
- taRollbackRetaining — отмена изменений без
завершения транзакции;
- taCommitRetaining — фиксация изменений
без завершения транзакции.
API InterBase позволяет определять ряд дополнительных
параметров транзакции. Они задаются в списке. свойства params и передаются серверу
в специальном буфере Transaction Parameters Buffer (TPB). Одноименное свойство
property TPB: PChar;
дает разработчику прямой доступ к этому буферу.
Таблица 24.2. Свойства и методы компонента
TiBTransaction
|
Объявление
|
Тип
|
Описание
|
|
Свойства
|
|
property Active: Boolean;
|
Pb
|
Открывает или закрывает транзакцию
|
|
property DatabaseCount: Integer;
|
Ro
|
Возвращает число баз данных, включенных
в транзакцию
|
|
property Databases [Index: Integer]: TIBDatabase;
|
Ro
|
Индексированный список соединений с базами
данных, включенных в транзакцию
|
|
type TTransactionAction = (taRollback, taCornmit, taRollbackRetaining,
taCommitRetaining);
|
Pb
|
Определяет действие, выполняемое компонентом
после окончания времени, заданного свойством IdleTimer
|
|
property DefaultAction: TTransactionAction;
|
|
|
|
property DefaultDatabase: TIBDatabase;
|
Ro
|
Ссылка на связанный компонент соединения
с базой данных
|
|
property IdleTimer: Integer;
|
Pb
|
Определяет время ожидания до автоматической
фиксации или отмены транзакции. Вы полняемое после этого действие зависит
от свойства DefaultAction
|
|
property InTransaction: Boolean;
|
Ro
|
Возвращает True при выполнении транзакции
|
|
property Params: TStrings;
|
Pb
|
Список параметров, задаваемых для транзакции
|
|
Методы
|
|
function AddDatabase (db: TIBDaiabase): Integer;
|
Pu
|
Добавляет к списку баз данных транзакции
еще одну базу данных
|
|
procedure
CheckDatabasesInList;
|
Pu
|
Проверяет список баз данных транзакции
|
|
procedure CheckInTransaction;
|
Pu
|
Проверяет наличие и активность целевой базы
данных для транзакции
|
|
procedure "heckNotInTransaction;
|
Pu
|
Проверяет наличие и неактивность целевой
базы данных для транзакции
|
|
irocedure Commit;
|
Pu
|
Фиксирует транзакцию
|
|
procedure CommitRetaining;
|
Pu
|
Передает на сервер все накопленные в связанных
наборах данных изменения. В отличие от метода commit, после выполнения
транзакция сохраняет свое состояние
|
|
function FindDatabase (db: TIBDatabase): Integer;
|
Pu
|
Возвращает порядковый номер компонента db
в списке транзакции
|
|
procedure RemoveDatabase (Idx: Integer) ;
|
Pu
|
Отключает соединение с порядковым номером
Idx от транзакции
|
|
procedure RemoveDatabases;
|
Pu
|
Отключает от транзакции все соединения
|
|
procedure Rollback;
|
Pu
|
Выполняет откат транзакции
|
|
procedure RoilbackRetaining;
|
Pu
|
Отменяет все сделанные на сервере с момента
начала транзакции изменения. В отличие от метода Rollback, транзакция
сохраняет свое состояние
|
|
procedure StartTransaction;
|
Pu
|
Начинает выполнение транзакции
|
|
Методы-обработчики событий
property OnIdleTimer: Pb TNotifyEvent;
|
|
Вызывается по истечении времени, заданного
СВОЙСТВОМ IdleTimer
|
Компоненты доступа к данным
Так как компоненты InterBase Express используют
для получения набора данных собственный механизм, то иерархия классов — предков
включает только
Обязательный для всех наборов данных TDataSet
и класс TIBCustomDataSet, который собственно и инкапсулирует механизм доступа
IB Express. Дополнительно к стандартным свойствам и методам класс TIBCustomDataSet
имеет свойство
type TIBUpdateRecordTypes = set of (cusModified,
cuslnserted, cusDeleted, cusUnmodified, cusUninserted);
property UpdateRecordTypes: TIBUpdateRecordTypes;
- cusModified — модифицированные записи;
- cuslnserted — добавленные записи;
- cusDeleted — удаленные записи;
- cusUnmodified — немодифицированные записи;
- cusUninserted — недобавленные записи;
определяющее записи набора данных, на которые
распространяются операции кэширования.
Так как все эти компоненты предназначены для работы
с сервером, то изначально все они поддерживают режим кэширования изменений и
имеют соответствующие свойства, методы и методы-обработчики событий.
Компоненты TIBTable, TIBQuery, TIBStoredProc,
TIBUpdateSQL мало чем отличаются от стандартных компонентов со страницы
Data Access.
Компонент TiBTab].e не имеет особенностей применения,
у него отсутствуют уникальные свойства и методы.
Компонент TIBQuery также используется обычным
образом. Он имеет дополнительное свойство property GenerateParamNames: Boolean;
При его установке в значение True генерирует список
параметров запроса. Компонент TIBStoredproc содержит дополнительное свойство:
property NameList: TStrings; которое представляет собой список хранимых процедур
базы данных. Компонент TIBUpdateSQL имеет свойство property RefreshSQL: TStrings;
которое позволяет задать запрос на обновление данных.
Компоненты TiBDataSet, tibsql реализуют дополнительные
возможности и более удобны в работе.
Для работы они используют два класса, которые
инкапсулируют важные структуры API InterBase. Эти структуры обеспечивают передачу
серверу параметров запроса и возвращение результата выполнения запроса. Поэтому
сначала рассмотрим классы tibxsqlda и tibxsqlvar, а затем перейдем к компонентам.
Область дескрипторов XSQLDA
Запрос может иметь собственные параметры, которые
должны содержаться в свойстве params. Однако, в отличие от обычного компонента
TQuery (гл. 20), это свойство представляет собой экземпляр класса tibxsqlda
(табл. 24.3). Этот класс инкапсулирует одноименную структуру API InterBase —
xsqlda, обеспечивающую передачу параметров запросу и возврат результатов. Такая
структура имеется у каждого запроса, выполняемого сервером InterBase,
и называется областью дескрипторов запроса (descriptors area).
Таблица 24.3.
Свойства и методы компонента tibxsqlda
|
Объявление
|
Тип
|
Описание
|
|
Свойства
|
|
property AsXSQLDA: PXSQLDA;
|
Pu
|
Ссылка на структуру xsqlda
|
|
property Count: Integer;
|
Pu
|
Возвращает число полей в структуре
|
|
property Modified: Boolean;
|
Pu
|
Позволяет определить возможность редактирования
полей структуры
|
|
property Names: String;
|
Pu
|
Возвращает имена полей в структуре
|
|
property RecordSize:
Integers-
|
Pu
|
Возвращает размер записи структуры
|
|
property Vars: [Idx: Integer] : T'lBXSQLVAR;
|
Pu
|
Индексированный список структур xsqlvar
(см.ниже)
|
|
Методы
|
|
procedure AddName (FieldName: String; Idx: Integer);
|
Pu
|
Добавляет к структуре новое поле
|
|
function ByName: [Idx: String]: TIBXSQLVAR;
|
Pu
|
Возвращает структуру xsqlvar, инкапсулирующую
отдельное поле результата запроса (см. ниже)
|
Структура XSQLVAR
Рассмотренная выше область дескрипторов содержит
возвращаемый результат запроса. Массив значений каждого возвращаемого поля сохраняется
в отдельной структуре xsqlvar. Индексированный список таких структур в области
дескрипторов представлен свойством
property Vars: [Idx: Integer]: TIBXSQLVAR
В целом, рассматриваемая структура соответствует
объекту поля Delphi (гл. 17), о чем свидетельствует и набор основных свойств
и методов класса структуры, представленный в табл. 24.4.
Помимо представленных в таблице свойств, класс
tibxsqlvar имеет ряд свойств, возвращающих значение в определенном формате:
AsCurrency,
AsDate, AsDateTime, AsDouble, AsFloat, Aslnt64,
Aslnteger, AsLong, AsPointer, AsQuad, AsShort, AsString, AsTime, AsVariant.
Таблица 24.4.
Свойства и методы компонента tibxsqlvar
|
Объявление
|
Тип
|
Описание
|
|
Свойства
|
|
property AsXSQLVAR: PXSQLVAR;
|
Pu
|
Представляет значение поля как структуру
XSQLVAR
|
|
property Data: PXSQLVAR;
|
Pu
|
Ссылка на структуру xsqlvar
|
|
property Index: Integer;
|
Pu
|
Возвращает индекс структуры в области дескрипторов
|
|
property IsNull: Boolean;
|
Pu
|
Позволяет определить наличие данных в структуре
|
|
property IsNullable: Boolean;
|
Pu
|
Позволяет определить, может ли структура
иметь значение
|
|
property Modified: Boolean;
|
Pu
|
Позволяет определить, изменялось ли значение
в структуре
|
|
property Size: Integer-
|
Pu
|
Максимальный размер данных в байтах
|
|
property SQLType: Integer;
|
Pu
|
Возвращает индекс АР! параметра
|
|
property Value: Variant;
|
Pu
|
Содержит возвращаемое значение
|
|
Методы
|
|
procedure Assign (Source: TIBXSQLVAR);
|
Pu
|
Присваивает объект, передаваемый в параметре,
данному объекту
|
|
procedure LoadFromFile (const FileName: String) ;
|
Pu
|
Загружает из файла данные в поле BLOB
|
|
procedure LoadFromStream (Stream: TStream) ;
|
Pu
|
Загружает из потока данные в поле BLOB
|
|
procedure SaveToFile (const FileName: String) ;
|
Pu
|
Сохраняет в файле данные из поля BLOB
|
|
procedure SaveToStream (Stream: TStream);
|
Pu
|
Сохраняет в потоке данные из поля BLOB
|
Компонент TIBDataSet
Компонент TIBDataSet предназначен для представления
в приложениях наборов данных от сложных запросов. При этом набор данных остается
редактируемым. Это достигается возможностью задать дополнительные запросы на
удаление, изменение и добавление данных. Аналогичным образом работает стандартный
компонент TUpdateSQL (гл. 22). Однако в компоненте TIBDataSet интегрированы
одновременно и сам сложный запрос, и вспомогательные запросы (табл. 24.5).
Основной запрос содержится в свойстве
property SelectSQL: TStrings;
Создание запроса облегчает простой редактор, вызываемый
при щелчке на кнопке в поле редактирования свойства в Инспекторе объектов.
Каждому запросу (основному и вспомогательным)
соответствует собственный объект tibsql, который подробно рассматривается ниже.
Таблица 24.5. Свойства и методы
компонента TIBDataSet
|
Объявление
|
Тип
|
Описание
|
|
Свойства
|
|
property BufferChunks: Integer;
|
Pb
|
Определяет число записей в буфере набора
данных
|
|
property DeleteSQL: TStrings;
|
Pb
|
Содержит текст запроса, обеспечивающего
удаление записей из набора данных
|
|
property InsertSQL: TStrings;
|
Pb
|
Содержит текст запроса, обеспечивающего
добавление записей в набор данных
|
|
property ModifySQL:.. TStrings;
|
Pb
|
Содержит текст запроса, обеспечивающего
изменение записей из набора данных
|
|
property Params: TIBXSQLDA;
|
Ro
|
Структура API, содержащая параметры запроса
|
|
property Prepared: Boolean;
|
Ro
|
Позволяет определить, подготовлен ли запрос
к выполнению
|
|
property QDelete: TIBSQL;
|
Ro
|
Объект запроса на удаление
|
|
property QInsert: TIBSQL;
|
Ro
|
Объект запроса на добавление
|
|
property QModify: TIBSQL;
|
Ro
|
Объект запроса на изменение
|
|
property QRefresh: TIBSQL;
|
Ro
|
Объект запроса на обновление
|
|
property QSelect:
TIBSQL;
|
Ro
|
Объект запроса на отбор данных
|
|
property RefreshSQL: TStrings;
|
Pb
|
Содержит текст запроса, обеспечивающего
обновление записей набора данных
|
|
property SelectSQL: TStrings;
|
Pb
|
Содержит текст основного запроса набора
данных
|
|
type TIBSQLTypes = set of (SQLUnknown, SQLSelect, SQLInsert,
SQLUpdate, SQLDelete, SQLDDL, SQLGetSegment, SQLPutSegment, SQLExeс Procedure,
SQLStartTransaction, SQLCommit, SQLRollback, SQLSelectForUpdate, SQLSetGenerator)
;
|
Ro
|
Возвращает тип основного запроса набора
данных.
SQLUnknown — неизвестный тип
SQLSelect,SQLInsert,SQLUpdate, SQLDelete
— стандартные типы
sqlddl — выражение DDL
SQLGetSegment,SQLPutSegment — запросы с
полями BLOB
SQLExecProcedure, SQLStartTransaction,SQLCommit,
SQLRollback — обработка транзакций
SQLSelectForUpdate — хранимая процедура,
возвращающая набор данных
SQLSetGenerator — выполнение генератора
|
|
Методы
|
|
procedure Prepare;
|
Pu
|
Осуществляет подготовку всех запросов компонента
к выполнению
|
|
procedure UnPrepare;
|
Pu
|
Возвращает все запросы набора данных к исходному
состоянию
|
|
Методы-обработчики событий
|
|
property Database Disconnected: TNotifyEvent;
|
Pb
|
Вызывается после отключения базы данных
|
|
property DatabaseDis connect ing: TNotifyEvent;
|
Pb
|
Вызывается во время отключения базы данных
|
|
property DatabaseFree: TNotifyEvent;
|
Pb
|
Вызывается после того, как компонент соединения
освобождает занимаемую память
|
Компонент
TIBSQL
Компонент tibsql предназначен для быстрого выполнения
запросов SQL, поэтому не обеспечивает связи с компонентами представления данных.
Для обеспечения скорости выполнения запроса из
компонента удалены все дополнительные механизмы, обслуживающие набор данных.
Фактически компонент tibsql не имеет отношения к обычным компонентам доступа
к данным, его непосредственным предком является класс TComponent, а не TDataSet.
Поэтому он только передает через компонент соединения TiBDatabase запрос серверу
и получает назад результат выполнения запроса.
Для повышения скорости компонент не обеспечивает
полноценной навигации по набору данных. Перемещение по набору данных возможно
только в прямом направлении (однонаправленный курсор).
Возвращаемые набором данных текущие значения полей
содержатся не в привычном наборе объектов полей TField. а в объекте tibxsqlda
(см. выше). Так как структура xsqlda создается сервером при выполнении запроса,
существенно уменьшается время открытия набора данных компонента (табл. 24.6).
Таблица 24.6. Свойства и методы
компонента tibsql
|
Объявление
|
Тип
|
Описание
|
|
Свойства
|
|
Property Bof: Boolean;
|
Pu
|
Значение True говорит о том, что курсор
находится в начале набора данных
|
|
property Database: TiBDatabase;
|
Pb
|
Определяет компонент соединения с базой
данных
|
|
property DBHandle: PISCDBHANDLE;
|
Pu
|
Указатель API на объект базы данных
|
|
property Eof: Boolean;
|
Pu
|
Значение True говорит о том, что курсор
находится в конце набора данных
|
|
property Fieldlndex: [FieldName: String]: Integer;
|
Pu
|
Список порядковых номеров полей по их именам
|
|
property Fields [const Idx: Integer]: TIBXSQLVAR;
|
Pu
|
Индексированный список структур xsqlvar,
хранящих значения полей набора данных
|
|
property GenerateParamNames:
Boolean;
|
Pu
|
Установка свойства в значение True проводит
создание список имен параметров запроса в свойстве Params
|
|
property GoToFirstRecordOnExecute: Boolean;
|
Pb
|
Значение True обеспечивает установку курсора
на первую запись набора данных при его открытии
|
|
property Handle:
TISC STMT HANDLE;
|
Pu
|
Содержит указатель API на запрос
|
|
property Open: Boolean;
|
Pu
|
Позволяет определить, открыт ли набор данных
|
|
property ParamCheck: Boolean;
|
Pb
|
Позволяет определить, был ли заново сгенерирован
список параметров запроса при изменении его текста во время выполнения
|
|
property Params: TIBXSQLDA;
|
Pu
|
Область дескрипторов запроса (см. выше)
|
|
property Plan: String;
|
Pu
|
Содержит план запроса после его подготовки
|
|
property Prepared: Boolean;
|
Pu
|
Значение True сообщает о том, что запрос
готов к выполнению
|
|
property RecordCount: Integer;
|
Pu
|
Возвращает число записей набора данных
|
|
property RowsAffected: Integer;
|
Pu
|
Возвращает число записей, обработанных запросом
|
|
property SQL: TStrings;
|
Pb
|
Содержит текст запроса
|
|
property SQLType: TIBSQLTypes read FSQLType;
|
Pu
|
Возвращает тип запроса. (Подробнее см. табл.
24.5)
|
|
property Transaction: TIBTransaction;
|
Pb
|
Указывает на компонент транзакции
|
|
property TRHandle: PISC TR HANDLE;
|
Pu
|
Содержит указатель API на транзакцию, в
которой работает запрос
|
|
property UniqueRelationName: String;
|
Pu
|
Возвращает уникальное внутреннее имя запроса
|
|
Методы
|
|
procedure Batchlnput (InputObject: TIBBatchInput) ;
|
Pu
|
Выполняет запрос с параметрами для переноса
в объект InputObject
|
|
procedure BatchOutput (OutputObject: TIBBatchOutput) ;
|
Pu
|
Выполняет запрос с параметрами для переноса
в объект outputObj ect
|
|
function Call (ErrCode: ISC STATUS; RaiaeError: Boolean): ISC STATUS;
|
Pu
|
Возвращает текст сообщения об ошибке по
ее коду ErrCode
|
|
procedure CheckClo5ed;
|
Pu
|
Вызывает исключение, если набор данных открыт
|
|
procedure CheckOpen;
|
Pu
|
Вызывает исключение, если набор данных
закрыт
|
|
procedure CheckValidStatement;
|
Pu
|
Вызывает исключение, если запрос некорректен
|
|
procedure Close;
|
Pu
|
Закрывает набор данных
|
|
function Current: TIBXSQLDA;
|
Pu
|
Ссылка на область дескрипторов запроса
|
|
procedure ExecQuery;
|
Pu
|
Выполняет запрос
|
|
function FieldByName [FieldName: String]: TIBXSQLVAR.;
|
Pu
|
Возвращает структуру xsqlvar по имени поля
|
|
procedure FreeHandle;
|
Pu
|
Освобождает ресурсы, занятые запросом
|
|
function Next: TIBXSQLDA;
|
Pu
|
Возвращает область дескрипторов для следующей
записи
|
|
procedure Prepare;
|
Pu
|
Готовит запрос к выполнению
|
|
Методы-обработчики событий
|
|
property OnSQLChanging: TNotifyEvent;
|
Pb
|
Вызывается при изменении запроса
|
Текст запроса задается обычным для всех компонентов
запросов свойством sql. Для выполнения запроса используется также знакомое свойство
ExecSQL. После этого можно обращаться к созданному компонентом набору данных.
Значения полей из текущей записи доступны через
свойство Fields. Обратите внимание, что это не объекты типа TField, как у обычных
компонентов доступа к данным (см. главу 17), а структуры xsqlvar из области
дескрипторов.
Будут ли переданы значения полей в компонент,
зависит от значения свойства GoToFirstRecordOnExecute.
Доступ к области дескрипторов осуществляется через
свойство Current.
Переход к следующей записи осуществляется методом
Next. При этом обновляется область дескрипторов запроса.
Обработка событий
Клиентское приложение Delphi, работающее с сервером
InterBase, имеет возможность отслеживать события, происходящие в базе данных
и вызываемые другими процессами или приложениями. Для этого используется компонент
TiBEvents. Он позволяет определить список необходимых событий и предоставляет
разработчику простой механизм отслеживания возникающих на сервере событий.
Список событий задается свойством
property Events: TStrings;
в котором можно определить до 15 контролируемых
событий (табл. 24.7).
Выбранные события необходимо зарегистрировать
на сервере. Для этого применяется метод
procedure RegisterEvents;
Метод
procedure QueueEvents;
начинает процесс передачи сообщений от сервера.
При возникновении на сервере зарегистрированного
события компонент вызывает метод-обработчик события
property OnEventAlert: TEventAlert;
TEventAlert = procedure( Sender: TObject; EventName:
String; EventCount:
longint; var CancelAlerts: Boolean)
Параметр EventName содержит имя последнего произошедшего
события.
Параметр EventCount содержит число заданных событий,
произошедших с момента последнего вызова метода-обработчика.
Параметр CancelAlerts позволяет прервать процесс
передачи сообщений приложению. Для этого необходимо присвоить параметру значение
True.
Для возобновления работы компонента нужно снова
использовать метод
QueueEvents.
Таблица 24.7.
Свойства и методы компонента TiBEvents
|
Объявление
|
Тип
|
Описание
|
|
Свойства
|
|
property Database: TIBDatabase;
|
Pb
|
Задает базу данных
|
|
property Events: TStrings;
|
Pb
|
Список контролируемых событий
|
|
property Queued: Boolean;
|
Ro
|
Значение True говорит о том, что процесс
передачи сообщений работает
|
|
property Registered: Boolean;
|
Pb
|
Определяет регистрацию сообщений на сервере
|
|
Методы
|
|
procedure CancelEventS;
|
Pu
|
Останавливает процесс передачи сообщений
|
|
procedure QueueEvents;
|
Pu
|
Включает процесс передачи сообщений
|
|
procedure RegisterEvents;
|
Pu
|
Проводит регистрацию сообщений на сервере
|
|
procedure UnRegisterEvents ;
|
Pu
|
Отменяет регистрацию сообщений на сервере
|
|
Методы-обработчики событий
|
|
property OnEventAlert: TEventAlert;
TEventAlert = procedure (Sender: TObject; EventName: String; EventCount:
longint; var CancelAlerts: Boolean)
|
Pb
|
Вызывается при передаче сообщения от сервера
компоненту
|
Информация о состоянии базы данных
В процессе отладки и выполнения клиентских приложений
для сервера InterBase разработчик может получать подробную информацию об этих
процессах.
Компонент TiBDatabaseinfo предоставляет информацию
о текущем состоянии базы данных.
Компонент TIBSQLMonitor отслеживает выполнение
запросов на сервере.
Компонент TiBDatabaseinfo
Компонент TiBDatabaseinfo обладает большим числом
свойств, содержащими разнообразные сведения о состоянии БД. Компонент очень
прост в применении.
Для выбора базы данных (компонента TIBDatabase)
используется стандартное свойство property Database: TIBDatabase;
В процессе работы с базой данных свойствам компонента
TIBDatabaseinfo передаются соответствующие значения. Разработчику необходимо
лишь в нужных местах использовать значения нужных свойств.
Таблица 24.8. Свойства и методы компонента
tibdb tabaseinfo
|
Объявление
|
Тип
|
Описание
|
|
Свойства
|
|
property Allocation: Long;
|
Ro
|
Число выделенных страниц БД
|
|
property BackoutCount: TStringList;
|
Ro
|
Число вариантов удаленных записей
|
|
property BaseLevel: Long;
|
Ro
|
Версия базы данных (содержится во втором
байте)
|
|
property CurrentMemory: Long;
|
Ro
|
Объем памяти (в байтах), занятый сервером
|
|
property Database: TIBDatabase;
|
Pb
|
Ссылка на компонент соединения с БД
|
|
property DBPileName: String;
|
Ro
|
Имя файла БД
|
|
property DBImplementationClass: Long ;
|
Ro
|
Номер класа описания
|
|
property DBImplementationNo: Long;
|
Ro
|
Номер описания
|
|
property DBSiteName: String;
|
Ro
|
Имя сайта БД
|
|
property DBSQLDialect: Long;
|
Ro
|
Номер диалекта SQL
|
|
property DeleteCount: TStringList;
|
Ro
|
Число удалений с момента последнего обновления
БД
|
|
property ExpungeCount: TStringList;
|
Ro
|
Число удалений записей с последнего сохранения
БД
|
|
property Fetches: Long;
|
Ro
|
Число чтений из кэша
|
|
property ForcedWrites: Long ;
|
Ro
|
Режим чтения: 0 — асинхронное чтение; 1
— синхронное чтение
|
|
property InsertCount: TStringList;
|
Ro
|
Число добавлений в БД с последнего сохранения.
|
|
property Marks: Long;
|
Ro
|
Число выполненных записей в кэш
|
|
property MaxMemory: Long;
|
Ro
|
Максимальный размер памяти, занимаемый БД
с момента последнего сохранения
|
|
property NoReserve: Long;
|
Ro
|
Резервирование страниц: 0 — резервирование
есть; 1 — резервирования нет
|
|
property NumBuffer5: Long;
|
Ro
|
Число выделенных буферов
|
|
property ODSMajorVersion: Long;
|
Ro
|
Верхнее значение ODS
|
|
property ODSMinorVersion: Long;
|
Ro
|
Нижнее значение ODS
|
|
property PageSize: Long ;
|
Ro
|
Размер странцы БД
|
|
property PurgeCount: TStringList;
|
Ro
|
Общее число удаленных по любой причине записей
|
|
property ReadIdxCount: TStringList;
|
Ro
|
Число чтений через индексы с последнего
сохранения
|
|
property Readonly: Long;
|
Ro
|
Значения: О—БД только для чтения; 1 — перезаписываемая
БД
|
|
property Reads: Long;
|
Ro
|
Число чтений из БД
|
|
property ReadSeqCount: TStringList;
|
Ro
|
Число чтений таблицы целиком с последнего
сохранения
|
|
property Sweeplnterval: Long;
|
Ro
|
Число зафиксированных транзакций
|
|
property UpdateCount: TStringList;
|
Ro
|
Число обновлений БД с последнего сохранения
|
|
property UserNames: TStringList;
|
Ro
|
Список активных пользователей
|
|
property Version: String;
|
Ro
|
Версия БД
|
|
property Writes: Long;
|
Ro
|
Число постраничных записей
|
|
Методы
|
|
function Call (ErrCode: ISC STATUS; RaiseError: Boolean): ISC STATUS;
|
Pu
|
Возвращает сообщение об ошибке по параметру
ErrCode
|
Компонент TIBSQLMonitor
Компонент TIBSQLMonitor позволяет получать в клиентском
приложении сообщения от сервера о выполняемых им операциях. Для этого используется
метод-обработчик компонента
TSQLEvent = procedure(EventText: String) of object;
property OnSQL: TSQLEvent;
Параметр .EventText содержит текст сообщения.
- В компоненте соединения с БД можно установить
перечень событий сервера, на которые будет реагировать компонент TiBSQLMonitor.
Это делается при помощи свойства TraceFlags (табл. 24.1). Возможные значения
множества означают контроль за следующими операциями:
- tfQPrepare — подготовка запроса к выполнению
(вызов метода prepare);
- tfQExecute — выполнение запроса (вызов метода
ExecSQL);
- tfQFetch — вызов запроса (вызов методов open,
close);
- tfError — возникновение ошибки;
- tfstmt — все операции с запросами;
- tfConnect — подключение и отключение
БД;
- tfTransact — выполнение транзакций;
- tfBlob — операции с данными BLOB;
- tfservice — вспомогательные операции;
- tfMisc — любые операции, не учтенные вышеперечисленными
значениями.
Резюме
В этой главе рассмотрены возможности набора компонентов
InterBase Express. Они обеспечивают быстрый и эффективный доступ к базам данных
на серверах InterBase. Для доступа к данным этим компонентам не требуется BDE,
они используют только возможности API InterBase.
Часть компонентов обеспечивает быстрый переход
со стандартных компонентов, инкапсулирующих набор данных, и повторяют функциональность
компонентов TTable, TQuery, TStoredProc И Т. Д.
Совершенно новые компоненты tibsql и TiBDataSet
полностью основаны на механизмах API InterBase, работают еще эффективнее, но
требуют нестандартных приемов работы.
Для успешного освоения этой главы желательно изучить
главы:
- глава 21 "Механизм удаленного доступа";
- глава 22 "Разработка клиентских приложений".
Вернуться к содержанию
|