Шаг 17.
Основные компоненты Delphi. Вкладка InterBase.
Свойства компонента TIBClientDataSet

    На этом шаге мы рассмотрим назначение компонентаTIBClientDataSet и его свойства.

    Компонент TIBClientDataSet создает клиентский НД. Его назначение - кэшировать получаемые от сервера данные и поддерживать двунаправленный курсор. Фактически он сочетает в себе свойства других компонентов-наборов: в свойство CommandText можно поместить SQL-запрос и выполнить его методом Execute - в этом случае он подобен компоненту TIBQuery; с другой стороны, он имеет целый набор свойств и методов, позволяющих использовать его как компонент TIBTable. Свойства компонента TIBClientDataSet перечислены в таблице 1.

Таблица 1. Свойства компонента TIBClientDataSet
Свойство Описание
property Active: Boolean; Открывает/закрывает набор данных
property ActiveAggs [Index: Integer]: TList; Указывает, каким образом осуществляется агрегирование значений: по всем данным (индекс 0), по первому групповому уровню (индекс 1) и т. д. Элементами ActiveAggs являются списки возможных значений свойства Aggregates. Если какой-либо элемент содержит NIL, агрегирование на данном уровне отсутствует
property Aggregates: TAggregates; Содержит наборы объектов класса TAggregate, каждый из которых определяет формулу, по которой осуществляется вычисление агрегатного значения
property AggregatesActive: Boolean; Разрешает/запрещает агрегирование данных
property CanModifу: Boolean; Содержит True, если данные можно изменять
propertyChangeCount: Integer; Содержит количество изменений, сделанных в текущем НД
propertyCloneSource: TCustomClientDataSet; Определяет НД, с которым компонент разделяет данные
property CommandText: String; Содержит текст SQL-запроса. Для TIBClientDataSet это текст свойства SQL внешнего компонента TIBDataSet
property DBConnection: TIBDatabase; Содержит ссылку на связной компонент
property DBTransaction: TIBTransaction; Содержит ссылку на транзакционный компонент
property Data: OleVariant; Содержит данные, полученные от провайдера
property DataSetField: TDataSetField; Открывает доступ к вложенным таблицам Oracle
property DataSize: Integer; Определяет текущую длину данных в байтах
property DataSource: TDataSource; В дочерней таблице указывает имя главного НД (вариант только для чтения свойства MasterSource)
property DBConnection: TDatabase; Содержит ссылку на связный компонент (на TIBDatabase)
property Delta: OleVariant; Содержит обновляемые записи
property DisableStringTrim: Boolean; Если содержит True, завершающие пробелы в текстовых столбцах будут отсекаться при подтверждении изменений
property FetchOnDemand: Boolean; Если содержит True, данные из ВLOВ-столбцов не включаются в пакет данных
property FileName: String; Содержит имя файла для хранения данных при отложенной обработке (см. ниже)
property Filter: String; Аналог свойства TDataSet.Filter
property Filtered: Boolean; Аналог свойства TDataSet.Filtered
property FilterOptions: TFilterOptions; Аналог свойства TDataSet.FilterOptions
property Found: Boolean; Если содержит True, для НД могут использоваться методы FindFirst, FindLast, FindNext, FindPrior
property GroupingLevel: Integer; Указывает количество уровней, на которых агрегируются данные
property IndexDefs: TIndexDefs; Содержит информацию об индексах таблиц БД
propertyIndexFieldCount: Integer; Содержит количество столбцов в индексе
property IndexFieldNames: String; Содержит имена индексных столбцов, разделенных символами точки с запятой
property IndexFields [Index: Integer]: TField; Открывает доступ к индексным столбцам
property IndexName: String; Содержит имя текущего индекса
property KeyExclusive: Boolean; Аналог свойства TTable.KeyExclusive
propertyKeyFieldCount: Integer; Содержит количество используемых для поиска индексных столбцов в сложном индексе
property KeySize: Word; Содержит длину в байтах текущего ключа
property LogChanges: Boolean; Содержит True, если ведется протокол изменений в локальном наборе данных. Если содержит False, компонент не поддерживает кэширование изменений
property MasterFields: String; Аналог одноименного свойства ТТаblе
property MasterSource: TDataSource; Аналог одноименного свойства ТТаblе
property Modified: Boolean; Содержит True, если текущая запись была изменена
property Options: TProviderOptions; Указывает способ заполнения данных и их использование (см. ниже)
property PacketRecords: Integer; Содержит максимальное количество записей в одном пакете данных
property Params: TParams; Аналог одноименного свойства TQuery
property ReadOnly: Boolean; Содержит True, если данные нельзя изменять
property RecNo: Integer; Аналог одноименного свойства ТТаblе
property RecordCount: Integer; Содержит количество записей в локальном НД
property SavePoint: Integer; Указывает позицию изменения в протоколе изменений (см. ниже)
type TUpdateStatus = (usUnmodified, usModif ied, uslnserted, usDeleted) ;
TUpdateStatusSet = set of TUpdateStatus;
property StatusFilter: TUpdateStatusSet;
Определяет записи, которые будут участвовать в процедуре обновления:
  • usUnmodified - это значение игнорируется;
  • usModified - измененные записи;
  • usInserted - вставленные записи;
  • usDeleted - удаленные записи
property XMLData: OleVariant; Аналог свойства Data, но представляет данные в формате языка XML

    Свойство FileName позволяет реализовать так называемую отложенную обработку данных. Если это свойство содержит имя файла, при закрытии компонента данные из кэша автоматически записываются в файл, а при открытии - считываются из него. Таким образом, компонент получает возможность работать с собственными данными и до поры не подтверждать их изменение в таблицах БД.

    Определение типа TProviderOption для свойства Options выглядит следующим образом:

type TProviderOption = ( poFetchBlobsOnDemand,
     poFetchDetailsOnDemand,
     poIncFieldProps, poCascadeDeletes,  
     poCascadeUpdates, poReadOnly, 
     poAllowMultiRecordUpdates, poDisableInserts,   
     poDisableEdits, poDisableDeletes, poNoReset, 
     poAutoRefresh, poPropogateChanges,                
     poAllowCommandText, poRetainServerOrder);
TProviderOptions = set of TProviderOption;

    Здесь элементы перечисления означают следующее:


    Примечание. Наличие в свойстве Options элемента poAllowCommandText разрешает клиенту изменить SQL-запрос провайдера (точнее, связанного с ним НД) в собственном свойстве CommandText. Это может быть обычный запрос SELECT, имя таблицы или хранимой процедуры. Для получения нового НД нужно вызвать метод GetRecords или Execute.

    С помощью свойства SavePoint можно восстановить НД после ошибочных изменений. Для этого нужно перед изменениями запомнить текущее значение свойства, а для отмены изменений - поместить в него сохраненное значение. Например, пусть значение в столбце Age (возраст) НД не должно быть меньше 0 и больше 100. Тогда можно использовать такой фрагмент программы:

var
  BeforeEditPos: Integer;

procedure TForm1.IBClientDataSet1BeforeEdit(DataSet: TDataSet);
begin
  // Перед началом изменений запоминаем позицию изменений
  // в глобальной переменной BeforeEditPos:
  BeforeEditPos := IBClientDataSetl.SavePoint; 
end;

procedure TForm1.IBClientDataSet1AfterEdit(DataSet: TDataSet);
 var
  Age: Real; 
begin
  Age := DataSet['Age']. AsFloat;
  if (Age<0) or (Age>100) then
  begin
    ShowMessage('Указан неверный возраст'); 
    IBClientDataSet1.SavePoint := BeforeEditPos;
  еnd; 
end;

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




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