Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП 01. Базы данных. Часть 2 — копия.doc
Скачиваний:
33
Добавлен:
09.12.2018
Размер:
637.44 Кб
Скачать

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).