Создание отчетов к БД в Delphi. Формирование отчетов "вручную". Содержимое запроса. Настройка TurboDelphiExplorer для работы с отчетами с помощью компонентов FastReport, страница 6

Выше вы рассматривали отчет, в котором присутствовала только одна полоса"Данные 1 уровня". FastReport  позволяет  печатать  отчеты,  содержащие  до  6  уровней данных  (можно  и  больше,  используя  объект  "Вложенный  отчет"). В реальных приложениях  редко приходится печатать отчеты с большой вложенностью данных; как правило, ограничиваются 1-3 уровнями. Рассмотрим создание двухуровневого отчета. Он будет содержать данные из таблиц Student и Uspevaemost. Первая таблица – это список студентов, вторая – список сданных ими зачетов и экзаменов.

Чтобы получить список дисциплин, сданных студентом, из таблицы следует отобрать записи, у которых поле St_bilet = выбранному студенту.

Приступим к созданию отчета, (здесь мы слегка упростим себе задачу отказавшись от динамически генерируемых запросов). Добавим  на форму DataModule Delphi  два  компонента  TSQLTable, 1 компонент  TDataSource,  два  компонента TfrxDBDataSet и один TfrxReport. Настроим компоненты TSQLTable таким образом, чтобы на следующим образом:

SQLTable1:

DatabaseConnection = 'MyBase'

TableName = 'Student'

SQLTable2:

DatabaseConnection = 'MyBase'

TableName = 'Uspevaemost'

DataSource1:

DataSet = SQLTable1

frxDBDataSet2:

DataSet = SQLTable1

frxDBDataSet3:

DataSet = SQLTable2

В  дизайнере  отчета  подключим  наши  источники  данных  в  меню "Report|Data…". Положим на страницу полосы MasterData("Данные 1 уровня") и DetailData ("Данные 2 уровня"). Обратите внимание – полоса "Данные 1 уровня" должна располагаться выше! Если поместить его под полосой "Данные 2 уровня", FastReport сообщит об ошибке при запуске отчета.

Разместим на них объекты отображения полей (frxMemoView) Если сейчас запустить отчет, мы увидим, что список дисциплин одинаковый для каждого студента и содержит все записи из таблицы Uspevaemost. Это произошло потому, что мы не включили фильтрацию записей в таблице Uspevaemost. Вернемся к нашим источникам данных. У компонента SQLTable2 установим свойство MasterSource =  DataSource1.  Таким  образом  мы  установили  связь  "главный-подчиненный".

Теперь надо задать условие фильтрации записей в подчиненном источнике. Для этого вызовите редактор свойства MasterFields у компонента SQLTable2 (дважды щелкните справа от свойства MasterFields). Вам надо связать два поля St_bilet в обоих источниках. Для этого выберите индекс St_bilet в списке сверху, выберите поля и нажмите кнопку "Add". Связка полей переместится в нижнее окно. После этого закройте редактор кнопкой ОК.

При запуске отчета FastReport сделает следующее. Выбрав очередную запись из  главной  таблицы  (Student),  он  установит  фильтр  на  подчиненную  таблицу (Uspevaemost). В таблице останутся только те записи, которые удовлетворяют условию Uspevaemost.st_bilet = Student.St_bilet. Т.е. для каждого студента будут показаны только его оценки:

Рисунок 5.5 Предпросмотр отчета «Главный-Детальный»

Аналогичным образом можно строить отчеты, содержащие до 6  уровней данных. Эстетико-дизайнерские стороны построения отчета оставляются для самостоятельной проработки.
ПРИЛОЖЕНИЕ 1

Задания к лабораторным работам.

Задание к лабораторной работе 1.

Согласно варианту, выданному преподавателем разработать в ERWin логическую и физическую модели данных.

Задание к лабораторной работе 2.

Используя модель, созданную в предыдущей лабораторной работе, конвертировать её в *.gdb /   *.fdb  файл

Заполнить БД информацией (по 7-12 записей в каждую таблицу).

Написать и продемонстрировать преподавателю запросы на выборку (Select), вставку (Insert), обновление (Update), Удаление (delete).

Написать генератор и триггер, обеспечивающие автоматическое заполнение ключевых полей при добавлении данных в таблицу. Минимум один  select  должен работать с несколькими таблицами.

Задание к лабораторным  работам 3-4.

Используя среду TurboDelphi написать для разработанной на занятии 2 БД клиентскую часть с уровнем функциональности не ниже описанного в методических указаниях (фильтрация, поиск, динамическая генерация запросов)

Задание к лабораторной работе 5.

С помощью дизайнера Fast Report Studio разработать: