Сервер баз данных InterBase и компоненты InterBase Express


На странице InterBase Палитры компонентов содержатся компоненты доступа к данным, адаптированные для работы с сервером InterBase и объединенные названием InterBase Express. Компоненты из набора InterBase Express предназначены для работы с сервером InterBase версии не ниже 5.5.
Их преимущество заключается в реализации всех функций за счет прямого обращения к API сервера InterBase. Благодаря этому существенно повысилась скорость работы компонентов.
Новые компоненты предоставляют разработчику новые возможности. Среди них:

  •  улучшенное управление транзакциями (для этого теперь предназначен отдельный компонент TiBTransaction);
  •  новые компоненты доступа к данным, позволяющие лучше решать распространенные задачи программирования (компоненты TiBDataSet, TIBSQL);
  •  возможность получения сведений о состоянии базы данных без прямого обращения к ее системным таблицам (компонент TiBDatabaseinfo);
  •  отслеживание состояния процессов выполнения запросов (компонент TIBSQLMonitor).

С точки зрения разработчика, за исключением нескольких новых свойств, методика использования этих компонентов в приложениях БД не отличается от стандартной методики (см. часть III). Любой новый компонент, инкапсулирующий набор данных, совершенно обычным образом через компонент TDataSource можно подключить к любому стандартному компоненту отображения данных.
В этой главе рассматриваются следующие вопросы:

  •  соединение с сервером InterBase и полноценное управление транзакциями из клиентского приложения;
  •  что изменилось в стандартных компонентах доступа к данным; 
  •  назначение и возможности новых компонентов доступа к данным;
  •  отслеживание процессов выполнения запросов на сервере из клиентского приложения;
  •  оценивание состояния базы данных;
  •  особенности переноса клиентских приложений, работающих с сервером InterBase, на новую компонентную базу.

 

Механизм доступа к данным InterBase Express


Для компонентов InterBase Express соединение с сервером БД осуществляет компонент TIBDatabase.
Для создания приложения клиент/сервер необходимо не только иметь работающий сервер, но и инсталлировать на клиентских рабочих местах специальное программное обеспечение, выполняющее соединение клиентского приложения с сервером.
Механизм доступа к данным InterBase Express использует для обращений к серверу возможности клиентского ПО InterBase, которое должно быть инсталлировано на компьютере. Если с данного компьютера доступны базы данных какого-либо сервера на платформе InterBase, то рассматриваемые здесь компоненты могут обращаться к этому серверу. При этом не требуется использовать BDE или любой другой механизм доступа к данным.
Но в результате все компоненты InterBase Express, инкапсулирующие набор данных, должны обращаться к базе данных только через компонент соединения TIBDatabase. На самом деле эта особенность не является недостатком в клиентских приложениях, т. к. организация соединения через один специализированный компонент всячески приветствуется и является хорошим тоном в программировании.
 
Компонент TIBDatabase
Так как для доступа к базе данных компонентам InterBase Express не требуется BDE, то для создания соединения используется всего одно свойство DatabaseName. В нем необходимо указать полный путь (включая имя сервера) к выбранному файлу БД с расширением gdb. Для этого можно воспользоваться стандартным диалогом выбора файла при щелчке на кнопке свойства в Инспекторе объектов.
Компонент имеет собственный редактор, который позволяет задать значения основных свойств, обеспечивающих соединение с базой данных (1).
Настройка соединения проводится следующим образом.
На панели Connection выбирается требуемый сервер InterBase (локальный или доступный удаленно), затем в списке Protocol определяется используемый сетевой протокол и при помощи кнопки Browse выбирается файл базы данных.
На панели Database Parameters задаются имя пользователя, его пароль и роль. Также можно выбрать и набор шрифтов для языковой адаптации приложения (список Character Set).
Для задания вводимых при подключении параметров (имя пользователя, пароль, схема, роль и т. д.) также можно использовать свойства Params и LoginPrompt.
Путь к файлу базы данных задается свойством
property DatabaseName: String;
Соединение включается и отключается свойством
property Connected : Boolean;
При этом свойство
property AllowStreamedConnected : Boolean;
управляет включением соединения при запуске приложения и служит дополнительным предохранителем. При значении False свойство запрещает открытие соединения при запуске приложения, даже если свойство Connected имело значение True. Так как часто приложение отлаживается на тестовой базе данных, а используется на реальной, то неверный путь в свойстве DatabaseName и не отключенное на этапе разработки свойство connected приведет к возникновению ошибки открытия соединения при запуске приложения на другом компьютере.
Параметры соединения, которые нельзя задать свойствами, устанавливаются свойством
property Params: TStrings;
в котором в каждой строке задается имя параметра и затем через знак равенства — его значение. Наиболее распространенный пример использования свойства Params — задание имени пользователя и его пароля:
user_name=sysdba password=masterkey
Свойство
property DBParamByDPB: [const Idx: Integer]: String;
позволяет получить доступ к отдельным параметрам соединения, не обращаясь к свойству Params.
 Примечание
Полный список индексов всех возможных параметров соединения Interbase можно найти в файле \Delphi7\Source\Vcl\IBHeader.pas.
Если соединение настроено правильно, метод
procedure TestConnected: Boolean;
возвращает значение True, иначе — False. Свойство
property IdleTimer: Integer;
задает временной интервал до отключения неиспользуемого соединения.
В компоненте TiBDatabase отсутствуют средства управления транзакциями, которые вынесены в отдельный компонент TiBTransaction (см. ниже).
Свойство
property DefaultTransaction: TiBTransaction;
позволяет задать транзакцию по умолчанию. При этом все компоненты с наборами данных, использующие данное соединение автоматически, начинают применять этот компонент транзакции. Изменяя значение этого свойства, можно в одном соединении работать с несколькими транзакциями.
Общее число связанных с данным соединением транзакций возвращает свойство
property TransactionCount: Integer;
а их полный перечень содержится в индексированном списке свойства
property Transactions [Index: Integer]: TIBTransaction;
Добавить к списку используемых новую транзакцию можно при помощи метода
function AddTransaction(TR: TIBTransaction): Integer;
Отменить связь между соединением и компонентом транзакции позволяет метод
procedure RemoveTransaction(Idx: Integer);
Но можно поступить и более радикально. Метод
procedure RemoveTransactions; 
отменяет связи со всеми транзакциями.
Используемый в методе RemoveTransaction индекс транзакции может быть найден методом
function FindTransaction (TR: TIBTransaction): Integer; 
а метод
function FindDefaultTransaction: TIBTransaction;
возвращает транзакцию по умолчанию.
С компонентом соединения можно связать произвольное число объектов, отслеживающих возникновение событий в базе данных InterBase (см. ниже). Для этого используется метод
procedure AddEventNotifier(Notifier: IIBEventNotifier);
который связывает с соединением либо интерфейс IIBEventNotifier, либо объект TIBEvents.
Парный ему метод
procedure RemoveEventNotifier{Notifier: IIBEventNotifier);
разрывает связь соединения с объектом-обработчиком событий. Свойство
type
TTraceFlag = (tfQPrepare, tfQExecute, tfQFetch, tfError, tfStmt,
tfConnect, tfTransact, tfBlob, tfService, tfMisc);
TTraceFlags = set of TTraceFlag;
property TraceFlags: TTraceFlags;
позволяет управлять сведениями о выполнении запросов, возвращаемыми компонентом TSQLMonitor (см. ниже описание этого компонента).
Группа методов позволяет судить о реальном состоянии соединения во время выполнения. Все они в случае неудачи проверки генерируют исключение
EIBClientError. 
Методы
procedure CheckActive;
И
procedure Checklnactive;
проверяют, функционирует или нет соединение. Метод
procedure CheckDatabaseName;
проверяет, заполнено ли свойство DatabaseName.
Компонент TiBDatabase позволяет выполнять некоторые операции с метаданными базы данных.
При помощи метода
procedure CreateDatabase;
можно создавать новые базы данных, включая создание файла базы данных. Все параметры новой базы данных, которые разработчик посчитает нужным указать явно, должны быть включены в список свойства Params (см. выше).
Имя файла новой базы данных должно быть указано в свойстве
procedure DropDatabase;
удаляет существующую базу данных, путь к которой указан свойством
DatabaseName.
Список List имен таблиц, имеющихся в базе данных, возвращает метод
procedure GetTableNames(List: TStrings; SystemTables: Boolean = False);
При этом параметр SystemTables управляет включением в список имен системных таблиц.
Метод
procedure GetFieldNames(const TableName: string; List: TStrings);
аналогичным образом возвращает список полей для таблицы, заданной параметром TableName.
Методы-обработчики событий компонента TiBDatabase представлены в табл. 18.1.
Таблица 18.1. Методы-обработчики событий компонента TiBDatabase

Компонент TIBTransaction


Компонент TIBTransaction инкапсулирует средства управления транзакцией при работе с сервером InterBase. Для этого он должен быть связан с компонентом TiBDatabase при помощи своего свойства
property DefaultDatabase: TiBDatabase;
Один компонент транзакции может быть связан с несколькими компонентами TiBDatabase. Для этого необходимо задать один компонент транзакции в свойствах DefaultTransaction всех необходимых компонентов соединений (см. выше). Список всех связанных компонентов соединений содержится в свойстве
property Databases[Index: Integer]: TiBDatabase;
а их общее число возвращает свойство
property DatabaseCount: Integer;
Во время выполнения новое соединение может быть связано с транзакцией методом
function AddDatabase(db: TIBDatabase): Integer;
Или же, связь может быть отменена:
procedure RemoveDatabase(Idx: Integer);
А метод
procedure RemoveDatabases;
разрывает все установленные связи с компонентом TIBDatabase.
Индекс связанного соединения в списке Databases транзакции можно получить при помощи метода
function FindDatabase (db: TIBDatabase): Integer;
Например, если вам не известно ничего, кроме имени компонента, можно поступить так:
var i, FIndex: Integer;
...
for i := 0 to Forml.ComponentCount — 1 do
 if Forml.Components[i].Name = 'IBDatabasel'
then FIndex := 
IBTransactionl.FindDatabase(TIBDatabase(Forml. Components[i]));
...
Соединение, заданное по умолчанию свойством DefaultDatabase, возвращает метод
function FindDefaultDatabase: TIBDatabase;
Транзакция может иметь набор параметров, задать которые можно при помощи свойства
property Params: TStrings;
аналогично компоненту TIBDatabase. Прямой доступ для чтения к буферу параметров транзакции Transaction Parameters Buffer (TPB) типа pchar обеспечивает свойство
property TPB: PChar;
Длина буфера содержится в свойстве
property TPBLength: Short;
Дескриптор транзакции представлен свойством
property Handle: TISC_TR_HANDLE;
После того как транзакция настроена, ее можно начать, сохранить или отменить.
Транзакция стартует при помощи метода
procedure StartTransaction;
При необходимости сохранить все сделанные в рамках текущей транзакции изменения используется метод
procedure Commit;
Если выполненные действия нужно отменить, применяется метод
procedure Rollback;
Для открытия и сохранения транзакции можно использовать традиционное свойство
property Active: Boolean;
После начала новой транзакции свойство
property InTransaction: Boolean;
принимает значение True, а после фиксации или отката — значение False.
При работе с сервером InterBase 6.0 можно использовать методы commit-Retaining и RollbackRetaining. В отличие от стандартных операций фиксации и отката транзакций, эти методы после передачи или отмены изменений оставляют текущую транзакцию открытой.
Если сервер перегружен и не откликается на транзакцию, то по истечении времени, заданного свойством
property IdleTimer: Integer;
 выполняется действие, заданное свойством
type TTransactionAction = (taRollback, taCommit, taRollbackRetaining,
taCommitRetaining);
property DefaultAction: TTransactionAction;
taRollback — откат транзакции; 
taCommit — фиксация транзакции;
taRollbackRetaining — отмена изменений без завершения транзакции (для сервера InterBase 6.0);
 taCommitRetaining — фиксация изменений без завершения транзакции (для сервера InterBase 6.0).
Для компонента транзакции можно настроить ее автоматическое завершение при закрытии последнего открытого компонента, инкапсулирующего набор данных, связанного с тем же соединением, что и транзакция.
Для этого свойство
type TAutoStopAction = (saNone, saRollback, saCoramit,
 saRollbackRetaining, saCommitRetaining); property AutoStopAction : TAutoStopAction;
не должно иметь значение saNone.
Остальные значения свойства выполняют следующие действия:

  •  saRollback — откат транзакции;
  •  saCommit — фиксация транзакции;
  •  saRollbackRetaining — отмена изменений без завершения транзакции (для сервера InterBase 6.0);
  •  saCommitRetaining — фиксация изменений без завершения транзакции (для сервера InterBase 6.0).

Метод
procedure CheckAutoStop;
выполняет действие, предусмотренное текущим значением свойства
AutoStopAction.
Диагностика состояния транзакции во время выполнения осуществляется группой специальных методов. В случае отрицательного результата все они генерируют исключение EiBClientError.
Метод
procedure CheckDatabasesInList;
проверяет, имеются ли в списке Databases связанные соединения. Метод
procedure ChecklnTransaction;
проверяет, открыта ли в данный момент транзакция. Метод
procedure CheckNotlnTransaction;
проверяет, закрыта ли в данный момент транзакция.
Единственный метод-обработчик транзакции
property OnldleTimer: TNotifyEvent;
вызывается по истечении срока ожидания выполнения транзакции, заданного свойством IdleTimer.
Компоненты доступа к данным
Так как компоненты InterBase Express используют для получения набора данных собственный механизм, то иерархия классов-предков включает только обязательный для всех наборов данных TDataSet класс TiBCustomDataSet, который, собственно, и инкапсулирует механизм доступа InterBase Express (см. 1).
Для связи с базой данных компоненты InterBase Express применяют компоненты соединения TiBDatabase (см. выше). Для этого они используют свойство
property Database: TiBDatabase;
Доступ к связанной транзакции осуществляется через свойство
property Transaction: TIBTransaction;
Дополнительно к стандартным свойствам и методам, описываемым в гл. 12, класс TiBCustomDataSet имеет свойство
type TIBUpdateRecordTypes = set of (cusModified, cuslnserted, cusDeleted,
cusUnmodified, cusUninserted);
property UpdateRecordTypes: TIBUpdateRecordTypes;
cusModified — модифицированные записи;
cuslnserted — добавленные записи; 
cusDeleted — удаленные записи; 
cusUnmodified — немодифицированные записи;
cusUninserted — недобавленные записи.
Данное свойство определяет записи набора данных, на которые распространяются операции кэширования.
Свойство
property BufferChunks: Integer;
определяет число записей, которые компонент загружает в собственный локальный буфер для ускорения выполнения стандартных операций.
При использовании компонентов в приложениях необходимо учитывать некоторые особенности.
Обновление набора данных выполняется не при каждом сохранении изменений. Такое поведение компонента определяется свойством
property ForcedRefresh: Boolean;
которое по умолчанию имеет значение False.
Это ускоряет работу компонента. При необходимости выполнять обновление данных с максимальной частотой свойству ForcedRefresh нужно присвоить значение True.
В зависимости от настроек компонента, с ним можно выполнять различные виды операций редактирования, перечень которых содержится в свойстве "только для чтения":
type
TLiveMode = (Imlnsert, ImModify, ImDelete, ImRefresh);
TLiveModes = set of TLiveMode; property LiveMode: TLiveModes;
Так как все эти компоненты предназначены для работы с сервером, то изначально все они поддерживают режим кэширования изменений и имеют соответственные свойства, методы и методы-обработчики событий.

Возможности компонентов TIBTable, TIBQuery, TIBStoredProc, TIBUpdateSQL мало чем отличаются от стандартных, описанных в гл. 12.
Для взаимодействия с сервером компоненты InterBase Express используют два класса, которые инкапсулируют важные структуры API InterBase. Эти структуры обеспечивают передачу серверу параметров запроса и возвращение результата выполнения запроса. Поэтому сначала рассмотрим классы TIBXSQLDA и TIBXSQLVAR, а затем перейдем к компонентам.
Область дескрипторов XSQLDA
Запрос может иметь собственные параметры, которые должны содержаться в свойстве Params. Однако, в отличие от обычного компонента запроса, в InterBase Express это свойство представляет собой экземпляр класса TIBXSQLDA (табл. 18.3). Этот класс инкапсулирует одноименную структуру API InterBase — XSQLDA, обеспечивающую передачу параметров запросу и возврат результатов. Такая структура имеется у каждого запроса, который выполняется сервером InterBase и называется областью дескрипторов запроса (descriptors area).
Таблица 18.3. Свойства и методы класса TIBXSQLDA

Структура XSQLVAR


Рассмотренная выше область дескрипторов содержит возвращаемый результат запроса. Массив значений каждого возвращаемого поля сохраняется в отдельной структуре XSQLVAR. Индексированный список таких структур в области дескрипторов представлен свойством
property Vars: [Idx: Integer]: TIBXSQLVAR
В целом, рассматриваемая структура соответствует объекту поля Delphi (см. гл. 13), о чем свидетельствует набор основных свойств и методов класса структуры, представленный в табл. 18.4.
Помимо представленных в таблице свойств, класс TIBXSQLVAR имеет ряд свойств, возвращающих значение в определенном формате: AsCurrency, AsDate, AsDateTime, AsDouble, AsFloat, Aslnt64, Aslnteger, AsLong, AsPointer, AsQuad, AsShort, AsString, AsTime, AsVariant.
Таблица 18.4. Свойства и методы класса TIBXSQLVAR

Компонент TIBTable


Компонент TIBTable реализует все возможности стандартного компонента, инкапсулирующего таблицу (см. гл. 12). Дополнительно к ним можно обратить внимание на несколько полезных свойств и методов.
При выборе таблицы (свойство TableName) свойство
type
TIBTableType = (ttSystem, ttview);
TIBTableTypes = set of TIBTableType;
 property TableTypes: TIBTableTypes;
определяет, какие таблицы доступны для выбора:

  • ttsystem — доступны системные таблицы и просмотры;
  • ttview — доступны определенные пользователем просмотры.

При открытии набора данных упорядочивание записей осуществляется в соответствии со значением свойства
property Defaultlndex: Boolean;
При значении True записи располагаются в порядке, определяемом первичным индексом таблицы БД.
Во время выполнения свойство
property Exists: Boolean;
позволяет определить, существует ли в базе данных таблица, имя которой определено свойством TableName.
Метод
procedure GotoCurrent(Table: TIBTable);
синхронизирует курсоры текущего набора данных и набора данных компонента, заданного параметром Table.
Методы-обработчики событий полностью соответствуют классу TiBCustom-DataSet (см. табл. 18.2).
Компонент TIBQuery
Компонент TIBQuery выполняет все стандартные функции компонента запроса и наследует возможности класса TiBCustomDataSet.
Как и у остальных компонентов запросов, свойство
property SQL: TStrings;
содержит текст запроса и позволяет редактировать его. С этим свойством связан специализированный редактор (2).
Для просмотра текста запроса можно использовать свойство
property Text: string;
Параметры запроса хранятся в стандартном свойстве
property Params: TParams;
Общее число параметров запроса возвращает свойство
property ParamCount: Word;
При создании новых записей в редактируемых наборах данных компонентов запросов возникает проблема присвоения значений полям первичных индексов. Очевидно, что при сохранении новой записи в базе данных поле первичного индекса будет инкрементировано средствами сервера InterBase (соответствующими генератором и триггером). Однако получить это значение в приложении можно только сохранив изменения и обновив набор данных, что зачастую требует больших затрат ресурсов.
Для решения этой проблемы в компоненте TiBQuery используется свойство
property GeneratorField: TIBGeneratorField;
Редактор свойства (2) позволяет связать генератор с инкрементируемым полем.
Список Generator позволяет выбрать один из доступных генераторов базы данных. Список Field задает инкрементируемое поле набора данных. В строке Increment By определяется шаг прибавляемого значения поля.
Группа радиокнопок Apply Event определяет событие, при котором срабатывает генератор:

  •  On New Record — при создании новой записи;
  •  On Post — при сохранении новой записи;
  •  On Server — генератор управляется сервером.

Редактор свойства GeneratorField попросту присваивает значения полям экземпляра класса TIBGeneratorField.
Методы-обработчики событий полностью соответствуют классу TiBCustom-DataSet.
Компонент TIBStoredProc
Компонент TIBStoredProc полностью соответствует стандартному прототипу, описываемому в гл. 12.
Имя хранимой процедуры задается свойством
property StoredProcName: String;
Список всех доступных на этапе выполнения хранимых процедур возвращает свойство
property StoredProcedureNames: TStrings;
Параметры хранимой процедуры содержатся в стандартном свойстве
property Params: TParams;
Общее число параметров возвращает свойство
property ParamCount: Word;
Свойство
property Prepared: Boolean;
позволяет определить, подготовлена ли хранимая процедура к выполнению. Методы-обработчики событий полностью соответствуют классу TiBCustom-DataSet (см. табл. 18.2).
Компонент TIBDataSet
Компонент TIBDataSet предназначен для представления в приложениях наборов данных от сложных запросов (свойства и методы описаны в табл. 18.5). При этом набор данных остается редактируемым. Это достигается возможностью задать дополнительные запросы на удаление, изменение и добавление данных. Аналогичным образом работает стандартный компонент TUpdateSQL (см. гл. 22). Однако в компоненте TIBDataSet интегрированы одновременно и сам основной запрос, и вспомогательные запросы.
Основной запрос содержится в свойстве
property SelectSQL: TStrings;
Создание запроса облегчает простой редактор, вызываемый при щелчке на кнопке в поле редактирования свойства в Инспекторе объектов (3).
Каждому запросу (основному и вспомогательным) соответствует собственный объект TIBSQL, который подробно рассматривается ниже.
Таблица 18.5. Свойства и методы компонента TIBDataSet

 
Компонент TIBSQL
Компонент TIBSQL предназначен для быстрого выполнения запросов SQL, поэтому не обеспечивает связи с компонентами представления данных (свойства и методы описаны в табл. 18.6).
Для обеспечения скорости выполнения запроса из компонента удалены все дополнительные механизмы, обслуживающие набор данных. Фактически компонент TIBSQL не имеет отношения к обычным компонентам доступа к данным, его непосредственным предком является класс icomponent, а не TDataSet. Поэтому он только передает через компонент соединения TiBDatabase запрос серверу и получает назад результат выполнения запроса.
Для повышения скорости компонент не обеспечивает полноценной навигации по набору данных. Перемещение по набору данных возможно только в прямом направлении (однонаправленный курсор).
Возвращаемые набором данных текущие значения полей содержатся не в привычном наборе объектов полей TField, а в объекте TIBXSQLDA (см. выше). Так как структура XSQLDA создается сервером при выполнении запроса, существенно уменьшается время открытия набора данных компонента.

Текст запроса задается обычным для всех компонентов запросов свойством SQL. Для выполнения запроса используется также знакомое свойство EXGCSQL. После этого можно обращаться к созданному компонентом набору данных. Значения полей из текущей записи доступны через свойство Fields. Обратите внимание, что это не объекты типа TFields, а структуры XSQLVAR из области дескрипторов.
Будут ли переданы значения полей в компонент, зависит от значения свойства GoToFirstRecordOnExecute.
Доступ к области дескрипторов осуществляется через свойство Current.
Переход к следующей записи выполняется методом Next. При этом обновляется область дескрипторов запроса.
Обработка событий
Клиентское приложение Delphi, работающее с сервером InterBase, имеет возможность отслеживать события, происходящие в базе данных и вызываемые другими процессами или приложениями. Для этого используется компонент TiBEvents. Он позволяет определить список необходимых событий и предоставляет разработчику простой механизм отслеживания возникающих на сервере событий. Свойства и методы компонента TiBEvents представлены в табл. 18.7.
Список событий задается свойством
property Events: TStrings;
в котором можно определить до 15 контролируемых событий.
Выбранные события необходимо зарегистрировать на сервере. Для этого применяется метод
procedure RegisterEvents; 
Метод
procedure QueueEvents;
начинает процесс передачи сообщений от сервера.
При возникновении на сервере зарегистрированного события компонент вызывает метод-обработчик события
property OnEventAlert: TEventAlert;
TEventAlert = procedure) Sender: TObject; EventName: String; EventCount:
longint; var CancelAlerts: Boolean)
Параметр EventName содержит имя последнего произошедшего события.
Параметр EventCount содержит число заданных событий, произошедших с момента последнего вызова метода-обработчика.
Параметр CancelAlerts позволяет прервать процесс передачи сообщений приложению. Для этого необходимо присвоить параметру значение True.
Для возобновления работы компонента нужно снова использовать метод QueueEvents.
Таблица 18.7. Свойства и методы компонента TiBEvents

Информация о состоянии базы данных


В процессе отладки и выполнения клиентских приложений для сервера InterBase разработчик может получать подробную информацию об этих процессах.
Компонент TiBDatabaseinfo предоставляет информацию о текущем состоянии базы данных.
Компонент TiBSQLMonitor отслеживает выполнение запросов на сервере.
Компонент TiBDatabaseinfo
Компонент TiBDatabaseinfo обладает большим числом свойств и методов, содержащих разнообразные сведения о состоянии БД (табл. 18.8). Компонент очень прост в применении.
Для выбора базы данных (компонента TiBDatabase) используется стандартное свойство
property Database: TiBDatabase;
В процессе работы с базой данных свойствам компонента TiBDatabaseinfo передаются соответствующие значения. Разработчику необходимо лишь в нужных местах использовать значения требуемых свойств.
Таблица 18.8. Свойства и методы компонента TiBDatabaseinfo

Компонент TIBSQLMonitor


Компонент TIBSQLMonitor позволяет получать в клиентском приложении сообщения от сервера о выполняемых им операциях. Для этого используется метод-обработчик компонента
TSQLEvent = procedure(EventText: String) of object;
 property OnSQL: TSQLEvent;
Параметр EventText содержит текст сообщения.
В компоненте соединения с БД можно установить перечень событий сервера, на которые будет реагировать компонент TIBSQLMonitor. Это делается при помощи свойства TraceFiags (см. выше). Вероятные значения множества означают контроль за следующими операциями:

  •  tfQPrepare — подготовка запроса к выполнению (вызов метода Prepare);
  •  tfQExecute — выполнение запроса (вызов метода ExecSQL);
  •  tfQFetch — вызов запроса (вызов методов Open, Close);
  •  tfError — возникновение ошибки;
  •  tfstmt — все операции с запросами;
  • tfconnect — подключение и отключение БД;
  •  tfTransact — выполнение транзакций;
  • tfBlob — операции с данными BLOB;
  •  tfService — вспомогательные операции;
  • tfMisc — любые операции, не учтенные вышеперечисленными значениями.
    • Резюме
    • В этой главе рассмотрены возможности набора компонентов InterBase Express. Они обеспечивают быстрый и эффективный доступ к базам данных на серверах InterBase. Для доступа к данным этим компонентам не требуется ВОЕ, они используют только возможности API InterBase.
    • Часть компонентов обеспечивает быстрый переход со стандартных компонентов, инкапсулирующих набор данных, и повторяет функциональность компонентов ТТаblе, TQuery, TStoredProc и т.д.
    • Компоненты TIBSQL и TiBDataSet полностью основаны на механизмах API InterBase, работают еще эффективнее, но требуют нестандартных приемов работы.

     

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г. Яндекс.Метрика