- •Содержание
- •Введение
- •Создание приложений с использованием технологии 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)
- •Вариант 2. Поставки товаров
- •Вариант 3. Исполнители
- •Вариант 4. Картинная галерея
- •Вариант 5. Порт
- •Вариант 6. Студенты
- •Вариант 7. Строительная компания
- •Вариант 8. Автосалон
- •Вариант 9. Аэропорт
- •Вариант 10. Диагностический центр
- •Вариант 11. Реклама
- •Вариант 12. Быстрая пицца
- •Вариант 13. Клуб собаководов
- •Вариант 14. Грузоперевозки
- •Вариант 15. Аптека
- •Вариант 16. Автовокзал
- •Вариант 17. Общественная организация
- •Вариант 18. Учет потребления газа
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).