Глава 24
Сервер баз данных InterBase и компоненты InterBase Express
В Delphi 5 появилась новая страница Палитры компонентов, содержащая компоненты доступа к данным, адаптированные для работы с сервером InterBase. Компоненты из набора InterBase Express предназначены для работы с сервером InterBase версии не ниже 5.5.
Их преимущество заключается в реализации всех функций за счет прямого обращения к API InterBase. Благодаря этому существенно повысилась скорость работы компонентов. Кроме этого, компоненты InterBase Express не нуждаются в посредничестве BDE, который замедляет работу самих компонентов и приложения в целом. Новые компоненты предоставляют разработчику новые возможности.
С точки зрения разработчика, за исключением нескольких новых свойств, методика использования этих компонентов в приложениях БД не отличается от стандартной методики. Любой новый компонент, инкапсулирующий набор данных, совершенно обычным образом через компонент TDataSource можно подключить к любому стандартному компоненту отображения данных.
В этой главе рассматриваются следующие вопросы.
Механизм доступа к данным 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;
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;
определяющее записи набора данных, на которые распространяются операции кэширования.
Так как все эти компоненты предназначены для работы с сервером, то изначально все они поддерживают режим кэширования изменений и имеют соответствующие свойства, методы и методы-обработчики событий.
Компоненты 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 содержит текст сообщения.
Резюме
В этой главе рассмотрены возможности набора компонентов InterBase Express. Они обеспечивают быстрый и эффективный доступ к базам данных на серверах InterBase. Для доступа к данным этим компонентам не требуется BDE, они используют только возможности API InterBase.
Часть компонентов обеспечивает быстрый переход со стандартных компонентов, инкапсулирующих набор данных, и повторяют функциональность компонентов TTable, TQuery, TStoredProc И Т. Д.
Совершенно новые компоненты tibsql и TiBDataSet полностью основаны на механизмах API InterBase, работают еще эффективнее, но требуют нестандартных приемов работы.
Для успешного освоения этой главы желательно изучить главы: