M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

    Объекты-агрегаты

    Для вычисления агрегатных выражений для всех записей набора данных используются объекты класса TAggregate. Индексированный список этих объектов содержится в свойстве

    property Aggregates: TAggregates;

    компонента TClientDataSet. Прямым предком класса TAggregates является класс TCollection, поэтому для него можно использовать все основные приемы работы с коллекциями (см. гл. 7).

    Для создания нового агрегата необходимо щелкнуть на кнопке свойства в Инспекторе объектов и, в появившемся Редакторе агрегатов, выбрать пункт Add во всплывающем меню или щелкнуть на кнопке Add New (рис. 22.3).

    Новый агрегат может быть добавлен и динамически:

    var NewAgg: TAggregate;

    NewAgg := ClientDataSet.Aggregates.Add;

    Рис. 22.3. Редактор агрегатов компонента TClientDataSet

    Рассмотрим свойства класса TAggregate.

    Имя агрегата содержится в свойстве

    property AggregateName: string;

    которое может быть использовано при отображении агрегата в визуальных компонентах.

    Вычисляемое выражение с применением агрегатных функций должно находиться в свойстве

    property Expression: String;

    Например, для таблицы COUNTRY.DB из демонстрационной базы данных Delphi можно вычислять общую площадь государств Северной и Южной Америки (площадь государства содержится в поле Area):

    ClientDataSet.Aggregates[Somelndex].Expression := 'SUM(Area)';

    Вычислением агрегата управляет свойство

    property Active: Boolean;

    а вычисленное значение возвращает функция

    function Value: Variant;

    Если пользователь редактирует набор данных, то для всех включенных агрегатов (Active = True) возвращаемое значение автоматически пересчитывается.

    Например, после сохранения изменений в наборе данных можно визуализировать новое значение агрегата:

    SomeLabel.Caption := ClientDataSet.Aggregates[0].AggregateName; 

    SomeEdit.Text := ClientDataSet.Aggregates[0].Value;

    Для проверки активности агрегата, помимо проверки значения свойства Active, можно также использовать свойство

    property InUse: Boolean;

    Если оно возвращает значение True — вычисляемое выражение агрегата рассчитывается.

    Видимость агрегата в визуальных компонентах управляется свойством

    property Visible: Boolean;

    Для того чтобы снизить вычислительную нагрузку на набор данных, можно отключить все агрегаты одновременно. Для этого свойству 

    property AggregatesActive: Boolean; 

    необходимо присвоить значение False.

    Если же AggregatesActive = True, вычисляются только активные агрегаты, для которых свойство Active имеет значение True.

    Если вам необходимо использовать все активные агрегаты, то вместо их последовательного перебора с проверкой свойства Active можно использовать свойство

    property ActiveAggs[index: Integer] : TList;

    компонента TClientDataSet, которое представляет собой список активных агрегатов.