- •Базы данных
- •Содержание
- •Введение
- •1. Создание приложений с использованием технологии bde
- •1.1. Лабораторная работа № 1: создание базы данных
- •1.1.1. Создание таблиц dBase IV
- •1.1.2. Создание индексов
- •1.1.3. Создание таблиц Paradox 7
- •1.1.4. Задание свойств таблицы Paradox 7
- •Задание на лабораторную работу № 1
- •1.2. Лабораторная работа № 2: установление связей между таблицами в многотабличной базе данных
- •1.2.1. Создание алиаса
- •1.2.2. Связывание таблиц
- •Задание на лабораторную работу № 2
- •1.3. Лабораторная работа № 3: работа с полями и компонентом dbGrid
- •1.3.1. Использование объектов-полей
- •1.3.2. Обращение к значению поля
- •1.3.3. События объекта-поля
- •1 Рис. 10. Пример использования события OnCellClick .3.4. События сетки dbGrid
- •1.3.5. Создание объектов-столбцов в dbGrid
- •1.3.6. Формирование списка возможных значений столбца
- •Задание на лабораторную работу № 3:
- •1.4. Лабораторная работа № 4: работа с наборами данных (компонент Table)
- •1.4.1. Открытие и закрытие набора данных
- •1.4.2. Доступ к записям
- •1.4.3. Навигация по набору данных
- •1.4.4. Поиск записей в наборах данных
- •1.4.5. Реализация каскадных изменений
- •1.4.6. Пример выполнения лабораторной работы
- •Задание на лабораторную работу № 4
- •1.5. Лабораторная работа № 5: работа с отчетами
- •1.5.1. Создание простейшего отчета
- •1.5.2. Создание отчета для связанных наборов данных
- •1.5.3. Использование выражений (компонент qrExpr)
- •1.5.4. Группирование данных в отчете
- •Задание на лабораторную работу № 5:
- •1.6. Лабораторная работа № 6: sql-запросы (компонент Query)
- •Задание на лабораторную работу № 6
- •2. Создание приложений, работающих с базами данных interbase
- •2.1. Лабораторная работа № 1: создание схемы базы данных
- •2.2. Лабораторная работа № 2: доступ к базе данных InterBase c использованием dbExpress
- •2.3. Лабораторная работа № 3: транзакции
- •2.4. Лабораторная работа № 4: отображение данных запроса
- •2.5. Лабораторная работа № 5: вычисляемые, агрегатные и подстановочные поля
- •2.5.1. Вычисляемые поля
- •2.5.2. Агрегатные поля
- •2.5.3. Подстановочные поля
- •2.6. Лабораторная работа № 6: связь Master-Detail
- •2.7. Лабораторная работа № 7: локальная репликация данных
- •Приложение 1 варианты заданий к лабораторным работам Вариант 1. Прием заказов
- •Вариант 2. Поставки товаров
- •Вариант 3. Исполнители
- •Вариант 4. Картинная галерея
- •Вариант 5. Порт
- •Вариант 6. Студенты
- •Вариант 7. Строительная компания
- •Вариант 8. Автосалон
- •Вариант 9. Аэропорт
- •Вариант 10. Диагностический центр
- •Вариант 11. Реклама
- •Вариант 12. Быстрая пицца
- •Вариант 13. Клуб собаководов
- •Вариант 14. Грузоперевозки
- •Вариант 15. Аптека
- •Вариант 16. Автовокзал
- •Вариант 17. Общественная организация
- •Вариант 18. Учет потребления газа
- •Приложение 2 порядок выполнения лабораторных работ
- •Библиографический список
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. Пример подстановочного поля