Программирование на Delphi 7

         

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



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

В процессе отладки и выполнения клиентских приложений для сервера InterBase разработчик может получать подробную информацию об этих процессах.

Компонент TiBDatabaseinfo предоставляет информацию о текущем состоянии базы данных.

Компонент TiBSQLMonitor отслеживает выполнение запросов на сервере.



Компонент TIBDatabase



Компонент TIBDatabase


Так как для доступа к базе данных компонентам InterBase Express не требуется BDE, то для создания соединения используется всего одно свойство DatabaseName. В нем необходимо указать полный путь (включая имя сервера) к выбранному файлу БД с расширением gdb. Для этого можно воспользоваться стандартным диалогом выбора файла при щелчке на кнопке свойства в Инспекторе объектов.

Компонент имеет собственный редактор, который позволяет задать значения основных свойств, обеспечивающих соединение с базой данных (Рисунок 18.1).





Компонент TiBDatabaseinfo



Компонент TiBDatabaseinfo


Компонент TiBDatabaseinfo обладает большим числом свойств и методов, содержащих разнообразные сведения о состоянии БД (табл. 18.8). Компонент очень прост в применении.

Для выбора базы данных (компонента TiBDatabase) используется стандартное свойство

property Database: TiBDatabase;

В процессе работы с базой данных свойствам компонента TiBDatabaseinfo передаются соответствующие значения. Разработчику необходимо лишь в нужных местах использовать значения требуемых свойств.



Компонент TIBDataSet



Компонент TIBDataSet


Компонент TIBDataSet предназначен для представления в приложениях наборов данных от сложных запросов (свойства и методы описаны в табл. 18.5). При этом набор данных остается редактируемым. Это достигается возможностью задать дополнительные запросы на удаление, изменение и добавление данных. Аналогичным образом работает стандартный компонент TUpdateSQL (см. гл. 22). Однако в компоненте TIBDataSet интегрированы одновременно и сам основной запрос, и вспомогательные запросы.

Основной запрос содержится в свойстве

property SelectSQL: TStrings;

Создание запроса облегчает простой редактор, вызываемый при щелчке на кнопке в поле редактирования свойства в Инспекторе объектов (Рисунок 18.3).

Каждому запросу (основному и вспомогательным) соответствует собственный объект TIBSQL, который подробно рассматривается ниже.



Компонент TIBQuery



Компонент TIBQuery


Компонент TIBQuery выполняет все стандартные функции компонента запроса и наследует возможности класса TiBCustomDataSet.

Как и у остальных компонентов запросов, свойство

property SQL: TStrings;

содержит текст запроса и позволяет редактировать его. С этим свойством связан специализированный редактор (Рисунок 18.2).

Для просмотра текста запроса можно использовать свойство

property Text: string;

Параметры запроса хранятся в стандартном свойстве

property Params: TParams;

Общее число параметров запроса возвращает свойство

property ParamCount: Word;

При создании новых записей в редактируемых наборах данных компонентов запросов возникает проблема присвоения значений полям первичных индексов. Очевидно, что при сохранении новой записи в базе данных поле первичного индекса будет инкрементировано средствами сервера InterBase (соответствующими генератором и триггером). Однако получить это значение в приложении можно только сохранив изменения и обновив набор данных, что зачастую требует больших затрат ресурсов.

Для решения этой проблемы в компоненте TiBQuery используется свойство

property GeneratorField: TIBGeneratorField;

Редактор свойства (Рисунок 18.2) позволяет связать генератор с инкрементируемым полем.



Компонент TIBSQL



Компонент TIBSQL


Компонент TIBSQL предназначен для быстрого выполнения запросов SQL, поэтому не обеспечивает связи с компонентами представления данных (свойства и методы описаны в табл. 18.6).

Для обеспечения скорости выполнения запроса из компонента удалены все дополнительные механизмы, обслуживающие набор данных. Фактически компонент TIBSQL не имеет отношения к обычным компонентам доступа к данным, его непосредственным предком является класс icomponent, а не TDataSet. Поэтому он только передает через компонент соединения TiBDatabase запрос серверу и получает назад результат выполнения запроса.

Для повышения скорости компонент не обеспечивает полноценной навигации по набору данных. Перемещение по набору данных возможно только в прямом направлении (однонаправленный курсор).

Возвращаемые набором данных текущие значения полей содержатся не в привычном наборе объектов полей TField, а в объекте TIBXSQLDA (см. выше). Так как структура XSQLDA создается сервером при выполнении запроса, существенно уменьшается время открытия набора данных компонента.



Компонент TIBSQLMonitor



Компонент 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 — любые операции, не учтенные вышеперечисленными значениями.

Компонент TIBStoredProc



Компонент TIBStoredProc


Компонент TIBStoredProc полностью соответствует стандартному прототипу, описываемому в гл. 12.

Имя хранимой процедуры задается свойством

property StoredProcName: String;

Список всех доступных на этапе выполнения хранимых процедур возвращает свойство

property StoredProcedureNames: TStrings;

Параметры хранимой процедуры содержатся в стандартном свойстве

property Params: TParams;

Общее число параметров возвращает свойство

property ParamCount: Word;

Свойство

property Prepared: Boolean;

позволяет определить, подготовлена ли хранимая процедура к выполнению. Методы-обработчики событий полностью соответствуют классу TiBCustom-DataSet (см. табл. 18.2).



Компонент TIBTable



Компонент 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).



Компонент TIBTransaction



Компонент 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 (см. Рисунок 12.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;

Так как все эти компоненты предназначены для работы с сервером, то изначально все они поддерживают режим кэширования изменений и имеют соответственные свойства, методы и методы-обработчики событий (табл. 18.2).



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



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

Для компонентов InterBase Express соединение с сервером БД осуществляет компонент TIBDatabase.

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

Механизм доступа к данным InterBase Express использует для обращений к серверу возможности клиентского ПО InterBase, которое должно быть инсталлировано на компьютере. Если с данного компьютера доступны базы данных какого-либо сервера на платформе InterBase, то рассматриваемые здесь компоненты могут обращаться к этому серверу. При этом не требуется использовать BDE или любой другой механизм доступа к данным.

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



Область дескрипторов XSQLDA



Область дескрипторов XSQLDA


Запрос может иметь собственные параметры, которые должны содержаться в свойстве Params. Однако, в отличие от обычного компонента запроса, в InterBase Express это свойство представляет собой экземпляр класса TIBXSQLDA (табл. 18.3). Этот класс инкапсулирует одноименную структуру API InterBase — XSQLDA, обеспечивающую передачу параметров запросу и возврат результатов. Такая структура имеется у каждого запроса, который выполняется сервером InterBase и называется областью дескрипторов запроса (descriptors area).



Обработка событий



Обработка событий

Клиентское приложение 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.



Редактор компонента TIBDatabase



Рисунок 18.1. Редактор компонента TIBDatabase


Настройка соединения проводится следующим образом.

На панели 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.



Редактор свойства GeneratorField компонента TiBQuery



Рисунок 18.2. Редактор свойства GeneratorField компонента TiBQuery


Список Generator позволяет выбрать один из доступных генераторов базы данных. Список Field задает инкрементируемое поле набора данных. В строке Increment By определяется шаг прибавляемого значения поля.

Группа радиокнопок Apply Event определяет событие, при котором срабатывает генератор:

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

Редактор свойства GeneratorField попросту присваивает значения полям экземпляра класса TIBGeneratorField.

Методы-обработчики событий полностью соответствуют классу TiBCustom-DataSet (см. табл. 18.2).

 



Редактор запроса компонента TIBDataSet



Рисунок 18.3. Редактор запроса компонента TIBDataSet


 



В этой главе рассмотрены возможности



Резюме

В этой главе рассмотрены возможности набора компонентов InterBase Express. Они обеспечивают быстрый и эффективный доступ к базам данных на серверах InterBase. Для доступа к данным этим компонентам не требуется ВОЕ, они используют только возможности API InterBase.
Часть компонентов обеспечивает быстрый переход со стандартных компонентов, инкапсулирующих набор данных, и повторяет функциональность компонентов ТТаblе, TQuery, TStoredProc и т.д.
Компоненты TIBSQL и TiBDataSet полностью основаны на механизмах API InterBase, работают еще эффективнее, но требуют нестандартных приемов работы.

Структура XSQLVAR



Структура 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.1. Методы-обработчики событий компонента TiBDatabase

Объявление

Тип

Описание

property Af terConnect: TNotifyEvent;

Pb

Выполняется после открытия  соединения

property AfterDisconnect: TNotifyEvent;

Pb

Выполняется после закрытия  соединения

property Bef oreConnect: TNotifyEvent;

Pb

Выполняется перед открытием  соединения

property BeforeDisconnect: TNotifyEvent;

Pb

 Выполняется перед закрытием  соединения

property OnDialectDowngradeWarning: TNotifyEvent;

Pb

 Выполняется в случае изменения диалекта SQL при открытии соединения

property OnldleTimer: TNotifyEvent;

Pb

Вызывается по истечении  времени, заданного свойством

dleTimer

TDatabaseLoginEvent = procedure (Database : TiBDatabase; LoginParams: TStrings) of object;

property OnLogin: TDatabaseLoginEvent ;

Pb

 

Вызывается для регистрации пользователя при открытии  соединения

 



Методыобработчики



Таблица 18.2. Методы-обработчики событий класса TiBCustomDataSet

Объявление

Описание

property Af terDatabaseDisconnect: TNotifyEvent;

Выполняется после закрытия соединения с базой данных

property AfterTransactionEnd: TNotifyEvent;

Выполняется по окончании транзакции, с которой связан данный набор данных

property Bef oreDatabaseDisconnect: TNotifyEvent;

Выполняется перед закрытием соединения с базой данных

property BeforeTransactionEnd: TNotifyEvent;

Выполняется перед окончанием транзакции, с которой связан данный набор данных

property DatabaseFree: TNotifyEvent;

Выполняется при обнулении свойства Database компонента набора данных

type

TIBUpdateAction = (uaFail, uaAbort, uaSkip, uaRetry, uaApplied, uaApply) ;

TIBUpdateErrorEvent = procedure ( DataSet : TDataSet ; E: EDatabaseError; UpdateKind: TUpdateKind; var UpdateAction: TIBUpdateAction) of object;

property OnUpdateError: TIBUpdateErrorEvent ;

Вызывается при возникновении ошибки сохранения изменений в режиме кэширования

type

TIBUpdateAction = (uaFail, uaAbort, uaSkip, uaRetry, uaApply, uaApplied);

TIBUpdateRecordEvent = procedure ( DataSet : TDataSet ; UpdateKind: TUpdateKind; var UpdateAction: TIBUpdateAction) of object;

property OnUpdateRecord: TIBUpdateRecordEvent ;

Вызывается при сохранении изменений в режиме кэширования

property TransactionFree: TNotifyEvent;

Выполняется при обнулении свойства Transaction компонента набора данных

Возможности компонентов TIBTable, TIBQuery, TIBStoredProc, TIBUpdateSQL мало чем отличаются от стандартных, описанных в гл. 12.

Для взаимодействия с сервером компоненты InterBase Express используют два класса, которые инкапсулируют важные структуры API InterBase. Эти структуры обеспечивают передачу серверу параметров запроса и возвращение результата выполнения запроса. Поэтому сначала рассмотрим классы TIBXSQLDA и TIBXSQLVAR, а затем перейдем к компонентам.



Свойства и методы класса TIBXSQLDA



Таблица 18.3. Свойства и методы класса TIBXSQLDA

Объявление

Тип

Описание

Свойства

property AsXSQLDA: PXSQLDA;

Pu

Ссылка на структуру XSQLDA

property Count: Integer;

Pu

Возвращает число полей в структуре

property Modified: Boolean;

Pu

Позволяет определить возможность редактирования полей структуры

property Names: String;

Pu

Возвращает имена полей в структуре

property RecordSize: Integer;

Pu

Возвращает размер записи структуры

property Vars: [Idx: Integer]: TIBXSQLVAR;

Pu

 Индексированный список структур XSQLVAR (см, ниже)

Методы

procedure AddName (FieldName: String; Idx: Integer);

Pu

  Добавляет к структуре новое поле

function ByName: [Idx: String] : TIBXSQLVAR;

Pu

Возвращает структуру XSQLVAR, инкапсулирующую отдельное поле результата запроса (см. ниже)



Свойства и методы класса TIBXSQLVAR



Таблица 18.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

Возвращает индекс API параметра

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) ;

рu

 Сохраняет в потоке данные из поля BLOB



Свойства и методы компонента TIBDataSet



Таблица 18.5. Свойства и методы компонента TIBDataSet

Объявление

Тип

Описание

Свойства

property Buff erChunks: 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 Qlnsert: 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, SQLExecProcedure , SQLStartTransaction, SQLCommit, SQLRollback, SQLSelect ForUpdate, 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 DatabaseDisconnected: TNotifyEvent;

Pb

Вызывается после отключения базы данных

property DatabaseDisconnecting: TNotifyEvent;

Рb

Вызывается во время отключения базы данных

property DatabaseFree: TNotifyEvent;

Pb

Вызывается после того, как компонент соединения освобождает занимаемую память

 



Свойства и методы компонента TIBSQL



Таблица 18.6. Свойства и методы компонента TIBSQL

Объявление

Тип

Описание

Свойства

property Bof: Boolean;

Pu

Значение True говорит о том, что курсор находится в начале набора данных

property Database: TiBDatabase;

Pb

Определяет компонент соединения с базой данных

property DBHandle: PISC DB_HANDLE;

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 RowsAf fected: 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 ( InputOb ect: TIBBatchlnput);

Pu

Выполняет запрос с параметрами для переноса в объект Inputobject

procedure BatchOutput (Output Object : TIBBatchOutput) ;

Pu

Выполняет запрос с параметрами для переноса в объект OutputObject

function Call (ErrCode: ISC_STATUS; RaiseError: Boolean): ISC STATUS;

Pu

Возвращает текст сообщения об ошибке по ее коду ErrCode

procedure CheckClosed;

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. Для выполнения запроса используется также знакомое свойство EXGCSQL. После этого можно обращаться к созданному компонентом набору данных. Значения полей из текущей записи доступны через свойство Fields. Обратите внимание, что это не объекты типа TFields, а структуры XSQLVAR из области дескрипторов.

Будут ли переданы значения полей в компонент, зависит от значения свойства GoToFirstRecordOnExecute.

Доступ к области дескрипторов осуществляется через свойство Current.

Переход к следующей записи выполняется методом Next. При этом обновляется область дескрипторов запроса.



Свойства и методы компонента TiBEvents



Таблица 18.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

Вызывается при передаче сообщения от сервера компоненту



Свойства и методы компонента TiBDatabaseinfo



Таблица 18.8. Свойства и методы компонента TiBDatabaseinfo

Объявление

Тип

Описание

Свойства

property Allocation: Long;

Ro

Число выделенных страниц БД

property BackoutCount: TStringList;

Ro

Число вариантов удаленных записей

property BaseLevel: Long;

Ro

Версия базы данных (содержится во втором байте)

property CurrentMemory: Long;

Ro

Объем памяти (в байтах), занятый сервером

property Database: TIBDatabase;

Pb

 Ссылка на компонент соединения с БД

property DBFileName: String;

RO

 Имя файла БД

property DBIinplementationClass : 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 NumBuffers: Long;

Ro

Число выделенных буферов

property ODSMajorVersion: Long;

Ro

Верхнее значение ODS

property ODSMinorVersion: Long;

Ro

Нижнее значение ODS

property PageSize: Long;

Ro

 Размер страницы БД

property PurgeCount: TStringList;

Ro

Общее число удаленных по любой причине записей

property ReadldxCount: TStringList;

Ro

 Число чтений через индексы с момента последнего сохранения

property Readonly: Long;

Ro

 0 — БД только для чтения; 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

Версия БД

1 property Writes: Long; 

Ro

Число постраничных записей

Методы

function Call (ErrCode:  ISC STATUS; RaiseError: Boolean) : ISC STATUS;

Pu

Возвращает сообщение об ошибке по параметру ErrCode