C++. Создание отчета Rave Report на основе таблицы MS Access в C++ Builder




Формирование отчета типа Rave Report на основе таблицы Microsoft Access в Borland C++ Builder

В этой статье Вы научитесь создавать отчеты Rave Report. Для этого достаточно пройти пошаговую инструкцию.


Содержание


Поиск на других ресурсах:

Условие задачи

Дана база данных, сформированная средствами СУБД Microsoft Access. База данных размещена в файле “udb1.mdb”. База данных содержит три таблицы, которые имеют следующую структуру:

05_01_00_003_tables_ru

 Таблицы связаны между собой следующей схемой (рис. 1):

База данных Microsoft Access схема таблица

Рис. 1. Схема связей между таблицами

Поле ID_Student таблицы Student есть полем подстановки для поля ID_Student таблицы Session. Поле ID_Predmet таблицы Predmet есть полем подстановки для поля ID_Predmet таблицы Session.

В таблицах базы данных уже внесено по 5-6 строк.

Задание состоит в формировании отчета средствами C++ Builder на основе данных с различных таблиц базы данных. Для формирования отчета используем компонент Rave Report, который поставляестся с системой программирования Borland C++ Builder. Структура отчета следующая:

База данніх структура отчет


Выполнение

1. Запустить Borland C++ Builder. Создать Windows-приложение

Запустить C++ Builder. Сохранить проект под любым именем. Подробный пример запуска C++ Builder и создания Windows-приложения подробно описывается здесь.

 

2. Подключение базы данных Microsoft Access к проекту

На этом этапе к проекту нужно подключить базу данных, созданную в СУБД Microsoft Access. Подробный пример подключения базы данных Microsoft Access к проекту описывается здесь.

Для подключения к файлу базы данных «udb1.mdb» выносим на форму следующие компоненты:

  • из вкладки dbGo компонент типа TADOConnection, которому соответствует объект-переменная с именем ADOConnection1;
  • из вкладки dbGo компонент типа TADOQuery (объект-переменная ADOQuery1);
  • из вкладки «Data Access» компонент типа TDataSource (объект-переменная DataSource1).

Главная форма приложения имеет вид (рис. 2):

C++ Builder форма приложение рисунок

Рис. 2. Главная форма приложения

Настраиваем свойства компонент для доступа к базе данных.

Первым делом настраиваем свойство ConnectionString компонента ADOConnection1. Выделяем компонент ADOConnection1.

С++ Builder свойство ConnectionString

Рис. 3. Настройка свойства ConnectionString

В Object Inspector в поле свойства ConnectionString делаем клик на кнопке ««. Открывается мастер подключения к базе данных.

Пошаговым выполнением мастера настраиваем подключение к базе данных Microsoft Access.

Выбираем следующие поля:

  • в поле поставщика OLE DB выбираем «Microsoft Jet 4.0 OLE DB Provider«;
  • во вкладке «Подключение» в поле «Выберите или введите имя базы данных» выбираем имя файла базы данных «udb1.mdb«.

После настройки свойства ConnectionString в компоненте ADOConnection1 выполняем связь этого компонента с ADOQuery1 и DataSource1.

Для этого:

  • свойство Connection компонента ADOQuery1 устанавливаем в значение ADOConnection1;
  • свойство DataSet компонента DataSource1 устанавливаем в значение ADOQuery1;
  • свойство LoginPrompt устанавливаем в значение false (для того, чтобы избежать постоянных запросов Login и пароль при открытии базы данных).

После выполненных действий имеем связь с базой данных «udb1.mdb». С помощью компонента ADOQuery1 теперь можем формировать запросы к базе данных и создавать собственные таблицы для формирования отчета.

 

3. Компоненты из вкладки Rave

На вкладке Rave палитры компонент Tool Palette отображены компоненты для формирования отчетов. В нашем случае выносим на форму такие компоненты с вкладки Rave (рис. 4):

  • компонент типа TRvProject которому соответствует объект-переменная RvProject1;
  • компонент типа TRvSystem (объект-переменная RvSystem1);
  • компонент типа TRvDataSetConnection (объект-переменная RvDataSetConnection1).

форма компонент RvProject1 RvSystem1 RvDataSetConnection1

Рис. 4. Форма с компонентами RvProject1, RvSystem1, RvDataSetConnection1

Объясним вкратце назначение каждого из компонент.

Компонент TRvProject осуществляет связь с файлом, в котором формируется отчет. Файл имеет расширение «*.rav». В нашем случае имя файла задаем такое которое предлагается по умолчанию, то есть «Report1.rav». В файле есть все необходимые средства для формирования отчета: текстовые поля, графические объекты, поля данных для получения информации из базы данных и другое.

Компонент TRvSystem реализует возможности настройки параметров страницы, задания полей при распечатке отчета и другое.

Компонент TRvDataSetConnection используется для связи отчета, который содержится в файле «Report1.rav», с базой данных.

В общем случае схема взаимодействия между компонентами программы, базой данных и файлом отчета имеет вид (рис. 5):

База данных Microsoft Access схема взаимодействия рисунок

Рис. 5. Схема взаимодействия между компонентами, базой данных и файлом отчета

 

4. Создание файла отчета

Работа по созданию файла отчета осуществляется с помощью специального редактора, который вызывается из контекстного меню после клика правой кнопкой мышки на компоненте RvProject1. В контекстном меню выбираем «Rave Visual Designer…» (рис. 6).

 C++ Builder редактор отчетов рисунок

Рис. 6. Выбор редактора отчетов

  В общем случае окно редактора Rave Report имеет вид (рис. 7):

C++ Builder редактор отчет Rave Reports

Рис. 7. Окно редактора отчетов Rave Reports 7

Как видно, пока что лист отчета пустой и не содержит никакой информации.
Следующим шагом сохраняем отчет вызвав команду Save из меню File (рис. 8). В результате откроется окно «Save Project1.rav As» в котором выбираем каталог, в котором будет сохранен файл отчета.

C++ Builder сохранение отчет

Рис. 8. Сохранение отчета

Рекомендуется сохранять файл отчета в одном каталоге с файлами разрабатываемого приложения. Так и сделаем, оставив имя файла «Project1.rav».

 

5. Настройка компонента RvReport1

Осуществим настройку компонента RvReport1.

Сначала настроим путь к файлу «Report1.rav». Для этого в поле свойства ProjectFile делаем клик на кнопке «…» и в окне выбора файла выбираем файл «Project1.rav» предварительно выбрав папку, в которой этот файл был сохранен (см. п.5).
Следующим шагом свойство Engine устанавливаем равным значению RvSystem1 (из спадающего списка). Это значит, что параметры страницы и режима просмотра будут настроены для файла отчета «Report1.rav» (рис. 9).

C++ Builder свойство Engine RvProject1

Рис. 9. Настройка свойства Engine компонента RvProject1

 

6. Настройка связи отчета Rave Report с базой данных

Для настройки связи отчета с базой данных будем использовать компонент RvDataSetConnection1. Свойство DataSet этого компонента устанавливаем в значение ADOQuery1 (рис. 10).

C++ Builder связь отчет база данных

Рис. 10. Настройка связи между отчетом и базой данных

 

7. Настройка компонента ADOQuery1
7.1. Формирование SQL-запроса

Поскольку, согласно условию задачи, необходимо сформулировать отчет на основании данных трех таблиц, то лучшим образом для этого подойдет соответствующий запрос к базе данных на языке SQL. Это есть причиной использования компонента ADOQuery1 в программе. Свойство SQL компонента ADOQuery1 позволяет формировать такие запросы.






В нашем случае запрос на языке SQL имеет вид:

SELECT [Session.Year], [Session.Semester], 
       Student.Name, Predmet.Name
FROM [Session], Student, Predmet
WHERE ([Session].ID_Student=Student.ID_Student) AND
 ([Session].ID_Predmet=Predmet.ID_Predmet)

Как видно из текста SQL-запроса данные получаются из трех таблиц и содержат четыре поля согласно условию задачи.
Вносим текст записи в свойство SQL компонента ADOQuery1. Окно редактора для ввода текста вызывается кликом мышью на кнопке «» в поле свойства SQL (рис. 11).

Microsoft Access SQL-запрос рисунок

Рис. 11. Формирование SQL-запроса

 

7.2. Активизация ADOQuery1

После устанавливаем свойство Active компонента ADOQuery1 в значение true.

 

7.3. Добавление полей отображения в ADOQuery1

Делаем клик правой кнопкой мыши на компоненте ADOQuery1. В контекстном меню выбираем “Fields Editor…”. В результате откроется редактор полей. Далее в окне редактора с помощью правой кнопки мыши командой «Add All Fields» добавляем все поля:

  • Year;
  • Semester;
  • Student.Name;
  • Subject.Name.

 

8. Формирование отчета с помощью мастера.

Опять вызываем редактор формирования отчета Rave Reports путем вызова «Rave Visual Designer…» из контекстного меню компонента RvProject1 (см. п. 5). Автоматически в редактор отчетов будет подгружен связанный с компонентом RvProject1 файл (в нашем случае файл с именем “Project1.rav”).

 

8.1. Добавление данных к отчету в файле отчета Report1.rav

Для того, чтобы база данных была доступной в файле отчета “Report1.rav” необходимо создать новый объект данных. Это осуществляется командой «New Data Object» из меню File (рис. 12).

Rave Report объект данных отчет

Рис. 12. Создание нового объекта данных

В результате откроется окно Data Connections (см. рис. 13), в котором предлагается несколько вариантов выбора типа объекта данных. В нашем случае выбираем Direct Data View и кликаем на «Next >«.

Отчет Rave Report тип объекта данных

Рис. 13. Выбор типа объекта данных

В следующем окне (рис. 14) появляется список активных соединений с данными. В нашем случае активным есть только одно соединение, что соответствует компоненту RvDataSetConnection1 с основной программы. Подтверждаем свой выбор кликом на кнопке Finish.

отчет Rave Report соединение данные

Рис. 14. Окно выбора соединения с данными

В правой части редактора можно увидеть (рис. 15), как был добавлен объект DataView1 в список Data View Dictionary. Если раскрыть этот объект (клавиша «+»), то можно увидеть поля только что созданной таблицы на основе SQL-запроса в компоненте ADOQuery1 основной программы.

Отчет Rave Report объект

Рис. 15. Объект DataView1

Полю «Год сдачи сессии» соответствует объект DataView1SessionYear, полю «Семестр» таблицы соответствует DataView1SessionSemester и т.д.

После выполненных действий у нас уже есть связь отчета с базой данных.

 

8.2. Вызов мастера создания отчета

Вид отчета и данных в нем можно формировать средствами редактора Rave Reports, которые есть на панели инструментов.

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

Данные из базы данных для отчета берутся из компонента RvDataSetConnection1, сформированного на основе запроса описанного в компоненте ADOQuery1 программы.

Вызов мастера осуществляется следующей последовательностью команд (рис. 16):

Tools –> Report Wizard –> Simple Table

C++ Builder Rave Report мастер отчет

Рис. 16. Вызов мастера построения отчета

В результате откроется окно “Simple Table” (рис. 17). В окне предлагается выбрать элемент просмотра данных. В нашем случае имеем только один объект DataView1. Кликаем  “Next >”.

отчет Rave Report элемент просмотра данных

Рис. 17. Окно выбора элемента просмотра данных DataView1

В следующем окне (рис. 18) предлагается выбрать поля объекта DataView1, которые будут использованы в отчете. Выбираем все поля, так как они все должны выводиться в соответствии с условием задачи. Кликаем на “Next >”.

Rave Report поле отображение отчет

Рис. 18. Выбор полей из Dataview1 для их отображения в отчете

В следующем окне (рис. 19) предлагается задать порядок следования полей. Оставляем все как есть. Кликаем «Next >”.

отчет Rave Report отображение поле

Рис. 19. Выбор последовательности отображения полей

  Следующее окно мастера (рис. 20) предлагает задать опции вывода:

  • заголовок отчета (поле Report Title);
  • возможность печати заголовка отчета (Print Report Title);
  • ограничительные поля, привязанные к формату страницы, в пределах которых будет сгенерирован отчет.

Изменяем только название, например на “My Rave Report”. Кликаем “Next >”.

 Отчет Rave Report опция отображение

Рис. 20. Задание опций отображения отчета (заглавие, поля печати)

В последнем окне мастера (рис. 21) предлагается изменить шрифт заголовка, шрифт сообщения и основной шрифт выводимых данных. Это осуществляется кликом на одной из кнопок с названием “Change Font”. Оставляем все без изменений.

Кликаем на кнопке “Generate”.

Отчет Rave Report шрифты заголовок

Рис. 21. Изменение шрифтов заголовка, сообщений и основного текста

После этого отчет будет сгенерирован (рис. 22).

Отчет Rave Report окно

Рис. 22. Окно сгенерированного отчета

 

9. Запуск отчета на выполнение

Запускаем отчет на выполнение клавишей F9 или командой Execute Report из меню File. В результате получим окно (рис. 23), в котором подтверждаем свой выбор кликом на OK (режим просмотра – Preview).

Отчет Rave Report запуск выполнение

Рис. 23. Окно запуска отчета на выполнение

  Следующим будет выведен отчет (рис. 24).

Rave Report вывод отчет экран

Рис. 24. Вывод отчета на экран

Как видно из рисунка, отчет имеет на совсем корректный вид, хотя данные выводит верно.

С помощью средств редактора Rave Report корректируем эти данные. Чтобы изменить свойства любого элемента (объекта) отчета его предварительно необходимо выделить. Затем в редакторе объектов (подобно Object Inspector) изменить соответствующее свойство.

Так, например, для изменения текста сообщения используется свойство Text (рис. 25).

отчет Rave Report текст свойство

Рис. 25. Изменение текста с помощью свойства Text

В верхней части редактора размещена панель инструментов. Так, например, для установления центрирования объекта в пределах его крайних размеров используется вкладка Fonts панели инструментов (рис. 26).

Rave Report Вкладка Fonts

Рис. 26. Вкладка Fonts

Важно здесь не спутать полосы в отчете (band). На рисунке 27 показано различные виды полос.

Отчет Rave Reports полоса

Рис. 27. Формирование полос в отчете

На рисунке 27 под номером 1 указана полоса, соответствующая заглавию отчета. Под номером 2 показана полоса заглавия полей таблицы. Под номером 3 показана полоса, в которой выводятся данные которые были сформированы на основании SQL-запроса в компоненте ADOQuery1 программы.

Изменяем отчет в более наглядный вид. Опять запускаем отчет (нажимаем F9).

 Rave Report итоговый отчет рисунок

Рис. 28. Итоговый отчет

Сохраняем файл отчета “Report1.rav”. Выходим из редактора отчетов Rave Report.

 

10. Вызов отчета из основной программы

После создания отчета осуществим программирование события вывода отчета. Для этого выносим на форму компонент кнопка типа TButton (соответствует объекту-переменной Button1). Свойство Caption кнопки устанавливаем в значение «Вывести отчет» (рис. 29).

C++ Builder форма рисунок

Рис. 29. Основная форма программы (окончательный вид)

Программируем событие обработки клика на Button1.

Программный код события имеет следующий вид:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  RvProject1->Execute(); 
}

Значит, чтобы вызвать отчет достаточно вызвать метод Execute() компонента RvProject1, что связан с отчетом (файл “Project1.rav”).

Запускаем наше приложение, кликаем на кнопке. После клика запускается отчет.

Задача решена!

 

11. Итоги

Чтобы сформировать отчет, в котором получаются данные из нескольких таблиц нужно сформировать SQL-запрос к базе данных, который сформирует таблицу необходимую для отчета. Затем эту таблицу нужно использовать в настройке работы отчета и с помощью мастера в редакторе отчетов сформировать отчет.

В программе использованы следующие компоненты:

  • из вкладки dbGo компонент типа TADOConnection, который необходим для связи с файлом базы данных;
  • из вкладки dbGo компонент типа TADOQuery, в котором задается запрос на языке SQL;
  • из вкладки «Data Access» компонент типа TDataSource, который есть источником данных для компонентов визуализации данных (в нашей программе не использован) таких как сетка TDBGrid;
  • компонент типа TRvProject, связывающий программу с файлом отчета (“Report1.rav”);
  • компонент типа TRvSystem, обеспечивающий параметры страницы для вывода отчета на печать;
  • компонент типа TRvDataSetConnection, который используется для связи базы данных с отчетом;
  • компонент типа TButton.

Для построения файла отчета “Report1.rav” использовался редактор Rave Report 7.