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

var NewAgg: TAggregate;
NewAgg := ClientDataSet.Aggregates.Add;
Программирование в Delphi 7

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

Рассмотрим свойства класса TAggregate. Имя агрегата содержится в свойстве

property AggregateName: string;

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

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

prcperüy Expression: String;

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

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

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

property Active: Boolean;

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

function Value: Variant;

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

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

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

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

property Inüse: Boolean;

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

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

property Visible: Boolean;

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

property AggregatesActive: Boolean; необходимо присвоить значение False.

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

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

property ActiveAggs [Index: Integer] : TList;

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

Агрегатные поля

Агрегатные поля не входят в структуру полей набора данных, т. к. агрегатные функции подразумевают объединение записей таблицы для получения результата. Следовательно, значение агрегатного поля нельзя связать с какой-то одной записью, оно относится ко всем или группе записей.

Агрегатные поля не отображаются вместе со всеми полями в компонентах TDBGrid, в Редакторе полей они расположены в отдельном списке. Для представления значения агрегатного поля можно воспользоваться одним из компонентов отображения данных, который визуализирует значение одного поля (например, TDBText или TDBEdit) или свойствами самого поля:

Labell.Caption := MyDataSetAGGRFIELDl.AsString;

Подробно вопросы создания агрегатных полей рассмотрены в гл. 13.

Класс TAggregateField предназначен для инкапсуляции свойств и методов агрегатных полей.

Его свойство

property Expression: string; задает вычисляемое выражение.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Декабрь
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31