Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка БД.doc
Скачиваний:
6
Добавлен:
16.11.2019
Размер:
842.75 Кб
Скачать

2.5. Лабораторная работа № 5: вычисляемые, агрегатные и подстановочные поля

Задание: Дополнить программу из лаб. работы № 2. Создать в ней несколько наборов данных и реализовать в них вычисляемые поля, агрегатные поля для подсчета суммы, средних значений и т.п. Сделать подстановочные поля.

Выполнение.

Все перечисленные типы полей создаются в редакторе полей клиентского набора данных вашей таблицы по команде New Field. Для каждого типа поля необходимо указать его имя (Name) и тип данных (Type), а также выбрать тип поля среди вариантов Field Type. Может потребоваться и дополнительная информация.

2.5.1. Вычисляемые поля

Для того чтобы создать вычисляемое поле, нужно в параметре Field type выбрать Calculated или InternalCalc, а также указать тип данных поля (допустим, Integer, Float или даже String).

После того как поле создано, опишите обработчик события OnCalcFields клиентского набора данных. Это событие возникает, когда программе необходимо пересчитать все вычисляемые поля набора данных.

Например, у нас есть таблица, в которой содержатся данные о сотрудниках. Поле Salary этой таблицы содержит размер заработной платы сотрудников. Теперь, чтобы рассчитать для каждого сотрудника размер премии, добавим вычисляемое поле с именем Bonus и типом float в клиентском наборе данных ClientDataSet1. Тогда в обработчике события OnCalcFields необходимо написать следующее:

ClientDataSet1Bonus.AsFloat:=

ClientDataSet1Salary.AsFloat*0.15;

Чтобы новое поле стало видимым в компоненте DBGrid, добавьте его в редакторе колонок этого компонента (в этом нет необходимости, если редактор колонок не содержит ни одного поля — тогда в DBGrid будут видны все поля клиентского набора).

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

Для подсчета суммы, среднего значения, минимума и т.п. по одному из полей набора данных применяются агрегатные поля. Чтобы создать агрегатное поле, выберите Aggregate в параметре Field type.

Используемые в агрегатных полях функции точно такие же, как в SQL. Это Sum, Avg, Count, Min и Max. Функцию агрегатного поля определяет его свойство Expression. Например, чтобы вычислить среднюю заработную плату сотрудников, в свойстве Expression укажите avg(salary). Кроме того, установите в True свойство Active агрегатного поля и свойство AggregatesActive клиентского набора данных.

Значение агрегатного поля можно получить из его свойства AsVariant или вывести, например, с помощью компонента DBText (установите свойства DataSource и DataField этого компонента).

2.5.3. Подстановочные поля

Как правило, подстановочные поля реализуются в главной таблице на основе данных справочных таблиц. Создавая новую запись в главной таблице, пользователю, несомненно, будет удобней выбрать, например, имя клиента из списка, нежели вспоминать код клиента (первичный ключ) данной записи из справочника.

Для работы со справочной таблицей поместите на форму те же компоненты, что и для главной таблицы, за исключением DBGrid (это SQLTable, DataSetProvider и ClientDataSet). Произведите их настройку (справочная таблица не должна быть связана с другими наборами данных, т.к. иначе она может содержать неполное число записей). Теперь в редакторе полей клиентского набора данных главной таблицы добавьте новое поле типа Lookup. Данные этого поля формируются на основании параметров Lookup definition:

  • Key fields — выберите здесь ключевое поле главной таблицы, для которого вы хотите создать подстановочное поле;

  • DataSet — укажите клиентский набор данных справочной таблицы;

  • Lookup keys — выберите ключевое поле справочной таблицы, по которому она связана с главной;

  • Result field — это поле справочной таблицы, «подставляемое» вместо ключевого поля главной таблицы. Все возможные значения этого поля появятся в выпадающем списке, когда пользователю потребуется сделать выбор.

Не забудьте указать тип данных нового поля — он соответствует типу данных поля, выбранного в качестве Result Field. То есть, если вы хотите, чтобы вместо кода стиля музыки пользователь выбирал его название (рис. 26), укажите тип данных String.

При добавлении новой записи пользователю не придется вспоминать код стиля музыки; достаточно будет выбрать название стиля из списка.

Рис. 26. Пример подстановочного поля