В выражениях вычисляемых полей можно использовать другие вычисляемые поля, но они обязательно должны быть определены в методе OnCalcFieids ДО ЭТОГО.

Вычисляемые поля нельзя использовать при фильтрации набора данных при помощи метода-обработчика onFilterRecord, т. к. он вызывается до метода-обработчика OnCalcFieids, а вычисляемые поля не сохраняются.

Внутренние вычисляемые ПОЛЯ

Помимо простых вычисляемых полей существуют внутренние вычисляемые поля (FieidKind = fkinternaicaic). Они используются в клиентских наборах данных (компоненты TClientDataSet) и отличаются тем, что их значения сохраняются в наборе данных.

Внутренние вычисляемые поля могут быть использованы для фильтрации МеЮДОМ-обрабоТЧИКОМ OnFilterRecord.

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

Агрегатные поля предназначены для выполнения вычислительных операций со значениями полей набора данных с использованием агрегатных функций SQL. К таким функциям относятся:

□ АЛО - вычисляет среднее значение;
□ COUNT - возвращает число записей;
• min - вычисляет минимальное значение;
□мах - вычисляет максимальное значение;

□ SUM - вычисляет сумму.

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

Использование агрегатных полей возможно только в компоненте TciientDataSet и его аналогах, т. к. он обеспечивает кэширование данных, необходимое для проведения вычислений (см. гл. 22).

Агрегатные поля не отображаются вместе со всеми полями в компонентах TDBGrid, в Редакторе полей они расположены в отдельном списке, а их свойство index (см. выше) всегда имеет значение - 1. Для представления значения агрегатного поля можно воспользоваться одним из компонентов отображения данных, который визуализирует значение одного поля (например, TDBText или TDBEdit), или свойствами самого поля: Label 1. Caption : = IMf/mtaSetÄIlRFIEIDl.AsString;

Для создания агрегатного поля необходимо использовать команду New field из всплывающего меню Редактора полей.

Для представления агрегатных полей имеется специальный класс TAggregateField. Его свойство

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

] )3ак. 559

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

SUM(Pirce*ItemCount) - SUM(Balance)

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

property Active: Boolean; которых имеет значение True.

Вычисление включенных свойством Active агрегатных полей выполняется только в том случае, если булевское свойство AggregatesActive клиентского компонента набора данных имеет значение True.

По умолчанию экземпляр класса TAggregateFieid создается со свойством

Visible = False.

Свойство

property GroupingLevel: Integer;

задает уровень группировки полей набора данных при вычислении. При значении 0 расчет проводится для всех записей набора данных. При значении 1 записи группируются по первому полю набора данных и расчет осуществляется для каждой группы. При значении 2 записи разбиваются на группы по первому и второму полям и т. д.


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

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



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

  • Август
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс