На этом шаге мы рассмотрим компонент TIBSQL.
Компонент TIBSQL предназначен для выполнения SQL-запросов с минимальными затратами времени. Он не может быть связан с компонентом TDataSource и, следовательно, с визуализирующими компонентами. В отличие от других компонентов-наборов, компонент TIBSQL произошел непосредственно от компонента TComponent, поэтому все его свойства, методы и события "свои", хотя многие из них в функциональном отношении повторяют одноименные свойства, методы и события других компонентов-наборов. Для ускорения доступа к данным компонент использует специальные классы записей и столбцов. Он создает однонаправленный курсор, так что перемещение по НД возможно только сверху вниз. Наконец, он лишен многочисленных событий AfterXXXX, BeforeXXXX, а также OnCalcField, так что в НД нельзя создать вычисляемые столбцы или реализовать бизнес-правила на основе обработчиков этих событий. Специфические свойства компонента TIBSQL перечислены в таблице 1.
| Свойство | Описание |
|---|---|
| property Bof: Boolean; | Содержит True, если курсор стоит перед первой записью НД |
| property Database: TIBDatabase; | Содержит ссылку на связанный компонент TIBDatabase |
| property DBHandle: PISC_DB_HANDLE; | Содержит дескриптор БД |
| property Eof: Boolean; | Содержит True, если курсор стоит после последней записи НД |
| property FieldIndex [FieldName: String]:Integer; | Возвращает индекс столбца по его имени |
| property Fields [const Idx:Integer]: TIBXSQLVAR; | Открывает индексный доступ к столбцам НД в формате TIBXSQLVAR |
| property GenerateParamNames: Boolean; | Если содержит True, компонент создает имена параметров для параметрического запроса |
| property GoToFirstRecordOnExecute: Boolean; | Если содержит True, курсор сразу после открытия НД устанавливается на его первую запись |
| property Handle: TISC_STMT_HANDLE; | Содержит дескриптор запроса |
| property Open: Boolean; | Содержит True, если НД открыт |
| property ParamCheck: Boolean; | Если содержит True, параметры параметрического запроса проверяются перед его выполнением |
| property Params: TIBXSQLDA; | Содержит параметры запроса в формате TIBXSQLDA (см. ниже) |
| property Plan: String; | Содержит план выполнения запроса после его подготовки |
| property Prepared: Boolean; | Содержит True, если запрос был подготовлен методом Prepare |
| property RecordCount: Integer; | Содержит количество записей в запросе |
| property RowsAffected: Integer; | Возвращает количество записей, которые были изменены в результате выполнения запроса |
| property SQL: TStrings; | Содержит текст запроса |
| property SQLType: TIBSQLTypes read FSQLType; | Содержит тип запроса (тип TIBSQLTypes смотри здесь) |
| property Transaction: TIBTransaction; | Содержит ссылку на связанный компонент TIBTransaction |
| property TRHandle: PISC_TR_HANDLE; | Содержит дескриптор транзакции |
| property UniqueRelationName: String; | Используйте это свойство, чтобы указать уникальное реляционное имя для запроса, касающегося одной таблицы |
Тип TIBXSQLVAR содержит практически те же методы приведения типов ASXXXX, как и "обычный" тип TField, а его свойство Value имеет тип Variant. Таким образом, работа со значениями столбцов компонента TIBSQL практически не отличается от работы со значениями столбцов других компонентов-наборов. Это же замечание относится к типу TIBXSQLDA и работе со значениями параметров. Указанные типы поддерживают специфику скоростной работы компонента. Методы компонента TIBSQL перечислены в таблице 2.
| Метод | Описание |
|---|---|
| procedure Batchinput (InputObject: TIBBatchlnput); | Выполняет параметрический запрос для объекта InputОbject |
| procedure BatchOutput (OutputObject: TIBBatchOutput); | Выполняет параметрический запрос для объекта OutputObject |
| procedure CheckClosed; | Возбуждает исключение, если запрос не закрыт |
| procedure CheckOpen; | Возбуждает исключение, если запрос закрыт |
| procedure CheckValidStatement; | Возбуждает исключение, если SQL-предложение ошибочно |
| procedure Close; | Закрывает запрос |
| function Current: TIBXSQLDA; | Возвращает дескриптор текущей записи |
| procedure ExecQuery; | Выполняет запрос |
| function FieldByName [FieldName: String]: TIBXSQLVAR; | Возвращает столбец по его имени |
| procedure FreeHandle; | Освобождает ресурсы InterBase, связанные с запросом |
| function Next: TIBXSQLDA; | Смещает курсор к следующей записи |
| procedure Prepare; | Готовит запрос к выполнению |
Нетрудно обнаружить, что единственным навигационным методом является метод Next. Таким образом, последовательный просмотр записей НД возможен только от начала набора к его концу. Компонент имеет единственное событие, которое возникает при изменении SQL-запроса:
property OnSQLChanging: TNotifyEvent;
На следующем шаге мы рассмотрим компонент TIBDatabaseInfo.