Глава 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, работают еще эффективнее, но требуют нестандартных приемов работы.

Для успешного освоения этой главы желательно изучить главы: