На этом шаге мы рассмотрим особенности использования компонента 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.
Свойство | Описание |
---|---|
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; |
Указывает, какие записи в кэшированием наборе видны при обновлении:
|
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.
Метод | Описание |
---|---|
procedure ApplyUpdates; | Переписывает изменения кэшированных данных в таблицу БД, но не завершает транзакцию |
type TCachedUpdateStatus =(cusUnmodified, cusModified, cusInserted, cusDeleted, cusUninserted) ; function CachedUpdateStatus: TCachedUpdateStatus; |
Возвращает статус кэшированных изменений:
|
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; | Позиционирует курсор на запись ниже текущей:
|
procedure Prepare; | Подготавливает компонент к выполнению запроса |
procedure UnPrepare; | Освобождает ресурсы, занятые при выполнении метода Prepare |
Событие | Описание |
---|---|
property DatabaseDisconnected: TNotifyEvent; | Возникает после разрыва соединения с БД |
property DatabaseDisconnecting: TNotifyEvent; | Возникает перед разрывом соединения с БД |
Property DatabaseFree: TNotifyEvent; | Возникает при разрушении связанного компонента TIBDatabase |
На следующем шаге мы рассмотрим компонент TIBSQL.