- •Базы данных
- •Содержание
- •Введение
- •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 порядок выполнения лабораторных работ
- •Библиографический список
1.5.2. Создание отчета для связанных наборов данных
Допустим, у нас связаны две таблицы: Table2 (главная) и Table1 (подчиненная) по полю ID_ARTIST. Table1 связана с Table2 с помощью свойств MasterSource и MasterFields. Основной частью отчета является комбинация полосы данных QRBand и полосы детализации QRSubDetail. Компонент QRSubDetail после помещения его в отчет автоматически располагается после полосы данных.
Для компонента отчета QuickRep в качестве набора данных устанавливается главный набор (в нашем случае это Table2). Для полосы детализации QRSubDetail устанавливается подчиненный набор данных. В этой полосе обычно размещаются компоненты QRDBText, с помощью которых выводятся значения полей записей подчиненной таблицы. Свойства DataSet этих компонентов также устанавливаются на подчиненный набор.
Пример формы отчета выглядит следующим образом (рис. 20):
Рис. 20. Структура отчета для связанных наборов данных
В результате получим (рис. 21):
Рис. 21. Отчет для связанных наборов данных
1.5.3. Использование выражений (компонент qrExpr)
Компонент QRExpr позволяет вставлять в отчет значение выражения, вычисляемого обычно с участием различных полей записей. Выражение заносится в свойство Expression типа String, для формирования которого удобно использовать окно Expression Wizard (Мастер выражений), вызываемое через Object Inspector (рис. 22).
Для вставки в выражение имени поля таблицы нужно нажать кнопку Database field и в открывшемся окне выбрать набор данных или имя поля.
Рис. 22. Окно мастера выражений
В выражении можно использовать функции, которые разбиты по категориям и выбираются в специальном окне, вызываемом нажатием кнопки Function. Например, чтобы узнать сумму по одному из полей таблицы, выберите категорию Statistical, в списке функций справа укажите SUM, а в качестве аргумента выберите требуемое поле, нажав кнопку Database Field.
Чтобы проверить введенное выражение, следует нажать кнопку Validate, при этом выдается сообщение о корректности выражения или об ошибке.
Примечание: функция COUNT не требует аргументов.
1.5.4. Группирование данных в отчете
Выводимые в отчете данные можно группировать по определенному признаку. Например, есть 3 таблицы (см. схему данных варианта № 2), содержащие:
Table1 — данные об исполнителях музыки,
Table2 — стили, в которых они работают,
Table3 — данные о записанных ими альбомах.
Записи таблицы Table3 содержат коды исполнителей и стилей. Таблицы связаны так, что Table1 является главной, а Table2 связана с ней через Table3. В таком случае в отчете удобно выполнить группировку по исполнителям, для каждого из которых будет выводиться список его альбомов.
Основной частью отчета является комбинация (рис. 23):
полоса Group Header (QRGroup) — здесь будут выведены заголовки столбцов для данных об исполнителе;
полоса Detail (QRBand) — здесь выводятся данные об исполнителе (компоненты QRDBText) и заголовки столбцов для списка его альбомов;
Рис. 23. Структура отчета с группированием данных
полоса SubDetail (QRSubDetail) — содержит компоненты QRDBText для вывода информации об альбомах, записанных исполнителем;
полоса Group Footer (QRBand) — нужна для подведения промежуточных итогов (например, отображения числа альбомов, записанных данным исполнителем). Эта полоса добавляется в отчет установкой свойства Bands.HasFooter компонента QRSubDetail;
полоса Summary — окончательный итог по всему отчету. Здесь можно вывести общее количество альбомов в базе.
Теперь опишем, как произвести настройку всех компонентов отчета.
QuickRep. Свойство DataSet настраивается на главную таблицу, т.е. Table1.
Group Header. В свойстве Expression необходимо указать поле таблицы, задающее условие группирования записей с одинаковым значением кода. В нашем примере это поле кода исполнителя из таблицы Table1.
Detail. Свойства DataSet компонентов QRDBText, находящихся на этой полосе, должны быть настроены на главную таблицу (Table1).
SubDetail. Здесь в свойстве DataSet нужно указать имя подчиненной таблицы, непосредственно связанной с главной. В нашем примере это Table3.
Рис. 24. Отчет с группированием данных
Group Footer. После помещения на эту полосу компонента QRExpr установите его свойству ResetAfterPrint значение True и укажите в свойстве Master имя полосы SubDetail. Это обеспечит вычисление выражения только для записей группы и сброс значения выражения после вывода очередной группы (т.е., например, подсчет альбомов для следующего исполнителя начнется с 0). Кроме того, можно рисовать горизонтальную линию, обозначающую подведение итогов по группе. Для этого в свойстве Frame установите DrawTop в True.
Summary. Поместите на эту полосу компоненты, отображающие информацию по итогам всего отчета. В зависимости оттого, по каким данным требуется подвести итоги, выберите в свойстве Master компонентов QRExpr этой полосы QuickRep или QRSubDetail. Например, чтобы подсчитать количество исполнителей, в этом свойстве нужно выбрать QuickRep. Если же требуется подсчитать общее число альбомов, выбираем QRSubDetail, т.к. вся информация об альбомах выведена именно на этой полосе.
В результате получим отчет (рис. 24).