На этом шаге мы рассмотрим особенности использования компонента 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.