C++. Приклад виведення таблиці бази даних в компоненті DBGrid в C++ Builder




Приклад виведення таблиці бази даних в компоненті DBGrid

Умова задачі

Дано базу даних “05_01_00_005_db.mdb“, сформовану в системі Microsoft Access.

База даних містить три таблиці Student, Subject та Session.

Структура таблиць наступна.

Таблиця Student.

05_01_00_005_table01u

Таблиця Subject (Дисципліна).

05_01_00_005_table02u

Таблиця Session (Сесія).

05_01_00_005_table03u

Таблиці зв’язані між собою такою схемою (рис. 1):

05_01_00_005_01_

Рис. 1. Схема зв’язків між таблицями

Створити додаток, в якому виводиться вміст таблиць у такому вигляді.

05_01_00_005_table04u

Для виведення використати компонент типу TDBGrid.

Дані полів взяти з таблиць як показано нижче.

05_01_00_005_table05u

Виконання

1. Запустити Borland C++ Builder.

Створити проект типу “VCL Form Application”.
Зберегти проект.

 

2. Винесення компонент на форму.

З палітри компонентів Tool Palette виносимо на форму такі компоненти:

  • компонент типу TLabel для виведення інформаційного повідомлення (рис. 2);
  • з вкладки “Data Access” компонент типу TDataSource (рис. 3);
  • з вкладки “DBGo” компоненти типу TADOConnection (рис. 4);
  • з вкладки “DBGo” компонент типу TADOQuery (рис. 5);
  • з вкладки “Data Controls” компонент типу TDBGrid для візуалізації таблиці (рис. 6).

Також, для виведення даних з бази даних, можливе використання компоненту TADOTable з вкладки DBGo.

У даному випадку компонент типу TADOQuery використовується замість TADOTable, оскільки дані в DBGrid формуються з трьох таблиць. Використання компонента TADOTable є доцільним в тому випадку, коли потрібно вивести тільки одну таблицю з бази даних.

У компоненті TADOQuery буде задано SQL-запит, який сформує одну таблицю з трьох згідно з умовою задачі.

05_01_00_005_02_

Рис. 2. Розміщення компонента типу TLabel на палітрі інструментів

 

05_01_00_005_03_

Рис. 3. Розміщення компонента типу TDataSource на формі

 

05_01_00_005_04_

Рис. 4. Компонент TADOConnection

 

05_01_00_005_05_

Рис. 5. Компонент TADOQuery з вкладки dbGo

 

05_01_00_005_06_

Рис. 6. Компонент TDBGrid з вкладки dbGo

У результаті винесення вищезгаданих компонент на форму, в C++ Builder буде сформовано об’єкти-змінні з такими іменами: Label1, DataSource1, ADOQuery1, ADOConnection1, DBGrid1.

3. Схема взаємодії між компонентами

У нашому випадку схема взаємодії між компонентами має вигляд, як показано на рис. 7.

05_01_00_005_07u

Рис. 7. Схема взаємодії між компонентами і базою даних

Першим етапом є встановлення зв’язку між додатком і базою даних. Цей процес детально описаний тут. Процес зв’язування додатку з базою даних відбувається у за принципом майстра.

У результаті формується властивість ConnectionString компонента ADOConnection1. Ця властивість вказує на розміщення файлу бази даних “05_01_00_005_db.mdb“.

Після формування властивості ConnectionString важливо встановити властивість LoginPrompt компонента ADOConnection1 у значення false. Це потрібно для доступу до записів бази даних без вводу паролю.

Щоб зв’язати інші компоненти між собою виконуємо такі дії:
– у компоненті ADOQuery1 властивість Connection=ADOConnection1;
– у компоненті DataSource1 властивість DataSet=ADOQuery1;
– у компоненті DBGrid1 властивість DataSource=DataSource1.

4. Властивість SQL компонента ADOQuery1.

Наступним кроком є налаштування властивості “SQL” компонента ADOQuery1. У цій властивості потрібно задати рядок SQL-запиту, що буде формуватись для виведення даних з бази даних.

Згідно з умовою задачі, має бути сформована таблиця, яка будується на основі трьох таблиць.






Сформуємо SQL-запит таким чином, щоб вибирались усі дані з усіх таблиць. А потім в компоненті DBGrid1 залишимо тільки потрібні поля.

Викликаємо властивість “SQL” компонента ADOQuery1. Для цього робимо клік на кнопці “” (рис. 8).

05_01_00_005_08_

Рис. 8. Властивість SQL компонента ADOQuery1

У результаті відкривається вікно редактора, в якому потрібно набрати текст SQL-запиту. Вводимо такий текст:

SELECT * FROM [Session], [Student], [Subject]

Таким чином, відображаємо усі поля з трьох таблиць.

05_01_00_005_09_

Рис. 9. Редактор для створення SQL-запиту

Натискаємо на кнопці “ОК“.

 

5. Формування полів у редакторі полів компонента ADOQuery1.

Після натиску на “OK” викликаємо вікно редактора полів компонента ADOQuery1. Робимо клік правою кнопкою миші на ADOQuery1 і в контекстному меню викликаємо команду “Fields Editor…“.

05_01_00_005_10_

Рис. 10. Виклик редактора полів “Fields Editor…” компонента ADOQuery1

У результаті відкриється вікно редактора полів Form1->ADOQuery1 (рис. 11).

05_01_00_005_11_

Рис. 11. Редактор полів компонента ADOQuery1

Робимо правий клік мишкою і в контекстному меню вибираємо команду “Add All Fields” (рис. 12). Це означає, що додаємо до обробки усі поля, що утворюються в результаті SQL-запиту.

05_01_00_005_12_

Рис. 12. Команда “Add All Fields

Після вибору команди вікно редактора полів прийме вигляд як зображено на рисунку 13.

05_01_00_005_13_

Рис. 13. Редактор полів з вибраними усіма полями трьох таблиць

Формуємо вікно редактора полів таким чином, щоб воно мало вигляд як показано на рисунку 14. Щоб видалити поле зі списку, потрібно з контекстного меню (правий клік мишкою) вибрати команду Delete.

05_01_00_005_14_

Рис. 14. Поля, що потрібні згідно з умовою задачі

Кожному полю в редакторі полів системою створюється відповідний об’єкт, який можна редагувати в Object Inspector.
Після цього можна закрити редактор полів.

 

6. Активація ADOQuery1.

Встановлюємо властивість Active=true в компоненті ADOQuery1. Після цього в компоненті DBGrid1 відобразяться усі шість полів з ADOQuery1 (рис. 15).

05_01_00_005_15_

Рис. 15. Властивість Active компонента ADOQuery1
6. Формування DBGrid1.

В компоненті DBGrid1 відображаються поля з ADOQuery1.

Тепер можна редагувати розміри форми та компонента DBGrid1.
Щоб краще відобразити компоненти в DBGrid1, викличемо редактор полів DBGrid1. Для цього робимо правий клік мишкою на DBGrid1 і в контекстному меню (рис. 16) вибираємо “Columns Editor…“.

05_01_00_005_16_

Рис. 16. Виклик редактора “Columns Editor…” компонента DBGrid1

У результаті відкриється вікно “Editing DBGrid1 -> Columns“. Робота з редактором “Columns Editor” є подібна до роботи з редактором полів компонента ADOQuery1.

Додаємо усі поля з допомогою команди “Add All Fields” (рис. 17).

05_01_00_005_17_

Рис. 17. Команда “Add All Fields

Вікно редактора прийме вигляд як показано на рисунку 18.

05_01_00_005_18_

Рис. 18. Поля, що можуть оброблятись в DBGrid1

Тепер є можливість виділяти відповідне поле (наприклад, Session.Year) і обробляти його зовнішній вигляд.

Також з допомогою мишки можна змінювати порядок слідування полів одного за одним. Простим перетягуванням впорядкуємо поля так як показано на рисунку 19. Таке впорядкування відповідає умові задачі.

05_01_00_005_19_

Рис. 19. Впорядкування полів згідно з умовою задачі

Якщо виділити поле Session.Year, то в Object Inspector можна побачити, що йому відповідає об’єкт-змінна з іменем DBGrid1.Columns[0]. Аналогічно полю Semester відповідає об’єкт-змінна з іменем DBGrid1.Columns[1]. Так само зі зміщенням номерів колонок створюються об’єкти для інших полів.

Використовуючи ці об’єкти-змінні можна редагувати зовнішній вигляд колонок (полів), що відображаються в DBGrid1.

Так, наприклад, можна встановити центрування заголовків полів, текст заголовків полів, вирівнювання основних даних в полях та інше.

На рис. 20 видно як змінюється центрування заголовку компонента DBGrid1.

05_01_00_005_20u

Рис. 20. Центрування заголовку

Після корегувань форми та усіх полів DBGrid1, форма додатку матиме приблизно такий вигляд (рис. 21).

05_01_00_005_21u

Рис. 21. Форма додатку після редагування DBGrid1 та корегування форми