003 – Формування звіту типу Rave Report на основі таблиці Microsoft Access в C++ Builder

Формування звіту типу Rave Report на основі таблиці Microsoft Access в Borland C++ Builder


Зміст



Умова задачі

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

05_01_00_003_00u

Таблиці зв’язані між собою за наступною схемою (рис. 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. Структура звіту наступна:

05_01_00_003_report_u


Виконання

1. Завантажити C++ Builder. Створити Windows-додаток

Детальний приклад створення головної форми Windows-додатку та огляд основних файлів проекту описується тут. Зберегти проект під деяким іменем.

 

2. Підключення бази даних Microsoft Access

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

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

  • з вкладки dbGo компонент типу TADOConnection, якому відповідатиме об’єкт-змінна з іменем ADOConnection1;
  • з вкладки dbGo компонент типу TADOQuery (об’єкт-змінна ADOQuery1);
  • з вкладки “Data Access” компонент типу TDataSource (об’єкт-змінна DataSource1).

Основна форма програми має вигляд (рис. 2).

C++ Builder головна форма програми

Рис. 2. Основна форма програми

Налаштовуємо властивості компонент для доступу до бази даних.

Першочергово налаштовуємо властивість ConnectionString компонента ADOConnection1. Виділяємо компонент ADOConnection1 (рис. 3).

05_01_00_003_03_

Рис. 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).

C++ Builder Rave компонент

Рис. 4. Компоненти з вкладки Rave

Пояснимо коротко призначення кожного з компонент. Компонент TRvProject здійснює зв’язок з файлом, в якому формується звіт. Файл має розширення “*.rav”. У нашому випадку ім’я файлу задаємо таке яке пропонується за замовчуванням, тобто “Report1.rav”. У файлі є усі необхідні засоби для формування звіту: текстові поля, графічні об’єкти, поля даних для отримання інформації з бази даних та інше.

Компонент TRvSystem реалізує можливості налаштування параметрів сторінки, задавання полів при роздруці звіту та інше.
Компонент TRvDataSetConnection використовується для зв’язку звіту, що міститься у файлі “Report1.rav”, з базою даних.

В загальному схема взаємодії між компонентами програми, базою даних та файлом звіту має вигляд

База даних Microsoft Access схема взаємодії

Рис. 5. Схема взаємодії між компонентами програми

 

4. Створення файлу-звіту

Робота зі створення файлу звіту здійснюється з допомогою спеціального редактора, що викликається з контекстного меню після кліку правою кнопкою мишки на компоненті RvProject1. У контекстному меню вибираємо “Rave Visual Designer…” (рис. 6).

компонент Rave Report редактор звітів

Рис. 6. Вибір редактора звітів

У загальному випадку вікно редактора Rave Report має вигляд зображений на рис. 7.

C++ Builder редактор звітів Rave Report

Рис. 7. Вікно редактора звітів Rave Report 7

Як видно, поки що лист звіту пустий і не містить ніякої інформації.
Наступним кроком зберігаємо звіт викликавши команду Save з меню File. У результаті відкриється вікно “Save Project1.rav As” в якому вибираємо каталог, в якому буде збережено файл звіту.

Rave Report збереження звіт

Рис. 8. Збереження звіту

Рекомендовано зберігати файл звіту в одному каталозі з файлами розроблюваного додатку. Так і зробимо залишивши ім’я файлу “Project1.rav”.

 

5. Налаштування компонента RvReport1

Здійснимо налаштування компонента RvReport1.

Спершу налаштуємо шлях до файлу “Report1.rav”. Для цього у полі властивості ProjectFile робимо клік на “…” і у вікні вибору файлу вибираємо файл “Project1.rav” попередньо вибравши папку, в якій цей файл був збережений (див. п.5).

Наступним кроком властивість Engine встановлюємо в значення RvSystem1 (зі спадного списку) (рис. 9). Це означає, що параметри сторінки та режиму перегляду будуть налаштовані для файлу звіту “Report1.rav”.

Компонент Rave Report властивість Engine

Рис. 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).

C++ Builder 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 в якому пропонується декілька варіантів вибору типу об’єкту даних. У нашому випадку вибираємо Direct Data View і клікаємо на “Next >” (рис. 13).

Rave Report тип об’єкт даних

Рис. 13. Вибір типу об’єкту даних

У наступному вікні (рис. 14) з’являється список активних з’єднань з даними. У нашому випадку активне тільки одне з’єднання, що відповідає компоненту RvDataSetConnection1 з основної програми. Підтверджуємо свій вибір кліком на кнопці Finish.

MS Access з’єднання дані

Рис. 14. Вікно вибору з’єднання з даними

У правій частині редактора (рис. 15) можна помітити, як було додано об’єкт DataView1 в список Data View Dictionary. Якщо розкрити цей об’єкт (клавіша “+”), то можна помітити поля новоствореної таблиці на основі SQL-запиту в компоненті ADOQuery1 основної програми.

Rave Report Об’єкт DataView1

Рис. 15. Об’єкт DataView1

Полю «Рік здачі сесії» відповідає об’єкт DataView1SessionYear, полю «Семестр» таблиці відповідає DataView1SessionSemester і т.д.

Після цього ми вже маємо зв’язок звіту з даними бази даних.

 

8.2. Виклик майстра побудови звіту

Вигляд звіту та даних в ньому можна формувати засобами редактора Rave Reports, які є на панелі інструментів. Але для роботи з даними, що отримуються з бази даних, рекомендовано скористатись вбудованим майстром генерування звіту. Це значно полегшить процес зв’язування даних з елементами звіту. Після виклику майстра можна здійснити корегування вигляду звіту на власний смак.

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

Отже, виклик майстра здійснюється послідовним викликом команд (рис. 16):

Tools –> Report Wizard –> Simple Table

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. У результаті отримаємо вікно у якому підтверджуємо кліком на OK (режим перегляду – Preview).

Rave Report звіт виконання

Рис. 23. Вікно запуску звіту на виконання

Наступним буде виведено звіт (рис. 24).

Rave Report звіт екран

Рис. 24. Вивід звіту на екран

Як видно з рисунку звіт виглядає не дуже коректно, хоча дані виводить правильно.

З допомогою засобів редактрора Rave Report корегуємо ці дані. Щоб змінити властивості будь-якого елементу (об’єкту) звіту його попередньо необхідно виділити. Потім у редакторі об’єктів (подібно до Object Inspector) змінити відповідну властивість.

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

Rave Report текст властивість Text

Рис. 25. Зміна тексту з допомогою властивості Text

У верхній частині редактора розміщується панель інструментів.

Так, наприклад, для встановлення центрування об’єкту в межах його крайніх розмірів використовується вкладка Fonts панелі інструментів (рис. 26).

C++ Builder Rave Reports вкладка Fonts

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

Важливо тут не сплутати смуги у звіті. Нижче показано різні види смуг (рис. 27).

Rave Report смуга звіт

Рис. 27. Формування смуг у звіті

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

Змінюємо звіт у більш приглядний вигляд. Знову запускаємо звіт, натискаємо F9 (рис. 28).

Rave Report підсумковий звіт

Рис. 28. Підсумковий звіт

Зберігаємо файл звіту “Report1.rav”. Виходимо з редактора звітів Rave Report.

 

10. Виклик звіту з основної програми

Після створення звіту здійснимо програмування події виведення звіту. Для цього виносимо на форму компонент кнопку типу TButton (відповідає змінна-об’єкт Button1). Властивість Caption кнопки встановлюємо в значення «Вивести звіт».

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.