Шаг 11.
Основные компоненты Delphi. Вкладка InterBase.
Компонент TIBDataSet

    На этом шаге мы рассмотрим особенности использования компонента TIBDataSet.

    Компонент TIBDataSet предназначен для просмотра и модификации набора записей, указанного в его свойстве SelectSQL. Особенностью компонента является то обстоятельство, что НД не становится обновляемым до тех пор, пока не определены модифицирующие его SQL-операторы в его строковых свойствах InsertSQL, DeleteSQL и ModifySQL. Если, например, в его свойстве InsertSQL записан правильный оператор INSERT, НД будет способен вставлять записи, но только так, как определено в этом операторе. Точно так же, если в свойстве DeleteSQL определен оператор DELETE, НД будет способен удалить запись или записи, определенные в этом операторе и т. д. Действия пользователя являются своеобразным "спусковым крючком", заставляя компонент автоматически выполнить нужный оператор. При этом если эти действия не совпадают с действиями, определенными дополнительными SQL-операторами, они отвергаются. Например, пусть в свойстве ModifySQL записан следующий оператор:

  UPDATE Credit 
    SET Summ=1
    WHERE N_Count=2;

    При наличии этого оператора какие бы изменения в какие бы записи ни вносил пользователь, фактически один раз будет выполнен указанный выше оператор, и запись (записи) из таблицы БД Credit со значением столбца N_Count = 2 получит в столбце Summ значение 1. Причем в сетке, отображающей НД, изменения будут видны так, как они сделаны пользователем, но фактически в таблице БД изменения окажутся другими - они "проявятся" после повторного открытия НД. Если в свойство RefreshSQL поместить такой же оператор, как и в основное свойство SelectSQL, все изменения в реальных данных станут видимыми немедленно, поэтому в сетке пользователь увидит не свои изменения, а те, что фактически сделаны соответствующими SQL-операторами. Свойства компонента TIBDataSet перечислены в таблице 1.

Таблица 1. Свойства компонента TIBDataSet
Свойство Описание
property BufferChunks: Integer; Указывает, на сколько записей будет увеличиваться буфер компонента по мере его наполнения
property Database: TIBDatabase; Содержит ссылку на связанный компонент TIBDatabase
property DBHandle: PISC_DB_HANDLE; Содержит дескриптор набора данных
рroperty DeleteSQL:TStrings; Содержит SQL-предложение для удаления записей. Если свойство содержит пустую строку, в НД нельзя удалять записи
рroperty InsertSQL:TStrings; Содержит SQL-предложение для вставки записей. Если свойство содержит пустую строку, в НД нельзя вставлять записи
property ModifySQL: TStrings; Содержит SQL-предложение для изменения записей. Если свойство содержит пустую строку, в НД нельзя редактировать записи
property Params: TIBXSQLDA; Содержит параметры для параметрического запроса
property Prepared: Boolean; Если содержит True, осуществляется подготовка перед исполнением запроса
property QDelete: TIBSQL; Содержит ссылку на объект, который инкапсулирует предложение DELETE
property QInsert: TIBSQL; Содержит ссылку на объект, который инкапсулирует предложение INSERT
property QModif у: TIBSQL; Содержит ссылку на объект, который инкапсулирует предложение UPDATE
property QRefresh: TIBSQL; Содержит ссылку на объект, который инкапсулирует предложение REFRESHSQL
property QSelect: TIBSQL; Содержит ссылку на объект, который инкапсулирует предложение SELECT
property RefreshSQL: TStrings; Содержит SQL-предложение, позволяющее обновить НД. Обычно оно просто совпадает с предложением SelectSQL
property SelectSQL:TStrings; Содержит предложение SELECT, создающее НД
property StatementType: TIBSQLTypes; Содержит тип SQL-предложения (см. ниже)
property Transaction: TIBTransaction; Содержит ссылку на связанный компонент TIBTransaction
property TRHandle: PISC_TR_HANDLE; Содержит дескриптор транзакции
property UpdateObject: TIBDataSetUpdateObject; Содержит ссылку на компонент TlBUpdateSQL, с помощью которого можно обновить НД только для чтения
type TIBUpdateRecordTypes = set of (cusModified, cusInserted, cusDeleted, cusUnmodified, cusUninserted) ;
property UpdateRecordTypes : TIBUpdateRecordTypes;
Указывает, какие записи в кэшированием наборе видны при обновлении:
  • cusModified - модифицированные записи;
  • cusInserted - вставленные записи;
  • cusDeleted - удаленные записи;
  • cusUnmodified - только неизмененные записи;
  • cusUninserted - только не вставленные записи
property Updates Pending: Boolean; Указывает, содержит ли буфер обновления записи

    Определение типа для свойства StatementType:

    type TIBSQLTypes  = set of (SQLUnknown, SQLSelect, SQLInsert, SQLUpdate, 
       SQLDelete, SQLDDL, SQLGetSegment,   SQLPutSegment, SQLExecProcedure, 
       SQLStartTransaction, SQLCommit,   SQLRollback,  SQLSelectForUpdate, 
       SQLSetGenerator);

    Здесь:

    Специфические методы компонента TIBDataSet перечислены в таблице 2. В отличие от стандартного метода Locate, который, как и Lookup, доступен компоненту, метод LocateNext ищет запись от текущей к концу НД. Специфические события компонента TIBDataSet перечислены в таблице 3.

Таблица 2. Методы компонента TIBDataSet
Метод Описание
procedure ApplyUpdates; Переписывает изменения кэшированных данных в таблицу БД, но не завершает транзакцию
type TCachedUpdateStatus =(cusUnmodified, cusModified, cusInserted, cusDeleted, cusUninserted) ;
function CachedUpdateStatus: TCachedUpdateStatus;
Возвращает статус кэшированных изменений:
  • cusUnmodif ied - данные не редактировались;
  • cusModif ied - данные редактировались;
  • cusInserted - были вставлены записи;
  • cusDeleted - были удалены записи;
  • cusUninserted - записи не вставлялись.
procedure CancelUpdates; Очищает буфер изменений
procedure FetchAll; Получает все записи от текущей до конца файла и сохраняет их локально
function GetFieldData (FieldNo : Integer; Buffer: Pointer): Boolean;
function GetFieldData (Field: TField; Buffer: Pointer): Boolean;
Читает в буфер Buffer данные из столбца по его номеру FiledNo или из объекта-поля Field
function LocateNext (const KeyFields: String; const KeyValues: Variant; Options : TLocateOptions): Boolean; Позиционирует курсор на запись ниже текущей:
  • KeyFields - имя ключевого столбца;
  • KeyValues - искомое значение;
  • Options - дополнительные условия поиска
procedure Prepare; Подготавливает компонент к выполнению запроса
procedure UnPrepare; Освобождает ресурсы, занятые при выполнении метода Prepare

Таблица 3. События компонента TIBDataSet
Событие Описание
property DatabaseDisconnected: TNotifyEvent; Возникает после разрыва соединения с БД
property DatabaseDisconnecting: TNotifyEvent; Возникает перед разрывом соединения с БД
Property DatabaseFree: TNotifyEvent; Возникает при разрушении связанного компонента TIBDatabase

    На следующем шаге мы рассмотрим компонент TIBSQL.




Предыдущий шаг Содержание Следующий шаг