Приклад виведення таблиці бази даних в компоненті DBGrid
Умова задачі
Дано базу даних “05_01_00_005_db.mdb“, сформовану в системі Microsoft Access.
База даних містить три таблиці Student, Subject та Session.
Структура таблиць наступна.
Таблиця Student.
Таблиця Subject (Дисципліна).
Таблиця Session (Сесія).
Таблиці зв’язані між собою такою схемою (рис. 1):
Рис. 1. Схема зв’язків між таблицями
Створити додаток, в якому виводиться вміст таблиць у такому вигляді.
Для виведення використати компонент типу TDBGrid.
Дані полів взяти з таблиць як показано нижче.
Виконання
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-запит, який сформує одну таблицю з трьох згідно з умовою задачі.
Рис. 2. Розміщення компонента типу TLabel на палітрі інструментів
Рис. 3. Розміщення компонента типу TDataSource на формі
Рис. 4. Компонент TADOConnection
Рис. 5. Компонент TADOQuery з вкладки dbGo
Рис. 6. Компонент TDBGrid з вкладки dbGo
У результаті винесення вищезгаданих компонент на форму, в C++ Builder буде сформовано об’єкти-змінні з такими іменами: Label1, DataSource1, ADOQuery1, ADOConnection1, DBGrid1.
3. Схема взаємодії між компонентами
У нашому випадку схема взаємодії між компонентами має вигляд, як показано на рис. 7.
Рис. 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).
Рис. 8. Властивість SQL компонента ADOQuery1
У результаті відкривається вікно редактора, в якому потрібно набрати текст SQL-запиту. Вводимо такий текст:
SELECT * FROM [Session], [Student], [Subject]
Таким чином, відображаємо усі поля з трьох таблиць.
Рис. 9. Редактор для створення SQL-запиту
Натискаємо на кнопці “ОК“.
5. Формування полів у редакторі полів компонента ADOQuery1.
Після натиску на “OK” викликаємо вікно редактора полів компонента ADOQuery1. Робимо клік правою кнопкою миші на ADOQuery1 і в контекстному меню викликаємо команду “Fields Editor…“.
Рис. 10. Виклик редактора полів “Fields Editor…” компонента ADOQuery1
У результаті відкриється вікно редактора полів Form1->ADOQuery1 (рис. 11).
Рис. 11. Редактор полів компонента ADOQuery1
Робимо правий клік мишкою і в контекстному меню вибираємо команду “Add All Fields” (рис. 12). Це означає, що додаємо до обробки усі поля, що утворюються в результаті SQL-запиту.
Рис. 12. Команда “Add All Fields“
Після вибору команди вікно редактора полів прийме вигляд як зображено на рисунку 13.
Рис. 13. Редактор полів з вибраними усіма полями трьох таблиць
Формуємо вікно редактора полів таким чином, щоб воно мало вигляд як показано на рисунку 14. Щоб видалити поле зі списку, потрібно з контекстного меню (правий клік мишкою) вибрати команду Delete.
Рис. 14. Поля, що потрібні згідно з умовою задачі
Кожному полю в редакторі полів системою створюється відповідний об’єкт, який можна редагувати в Object Inspector.
Після цього можна закрити редактор полів.
6. Активація ADOQuery1.
Встановлюємо властивість Active=true в компоненті ADOQuery1. Після цього в компоненті DBGrid1 відобразяться усі шість полів з ADOQuery1 (рис. 15).
Рис. 15. Властивість Active компонента ADOQuery1
6. Формування DBGrid1.
В компоненті DBGrid1 відображаються поля з ADOQuery1.
Тепер можна редагувати розміри форми та компонента DBGrid1.
Щоб краще відобразити компоненти в DBGrid1, викличемо редактор полів DBGrid1. Для цього робимо правий клік мишкою на DBGrid1 і в контекстному меню (рис. 16) вибираємо “Columns Editor…“.
Рис. 16. Виклик редактора “Columns Editor…” компонента DBGrid1
У результаті відкриється вікно “Editing DBGrid1 -> Columns“. Робота з редактором “Columns Editor” є подібна до роботи з редактором полів компонента ADOQuery1.
Додаємо усі поля з допомогою команди “Add All Fields” (рис. 17).
Рис. 17. Команда “Add All Fields“
Вікно редактора прийме вигляд як показано на рисунку 18.
Рис. 18. Поля, що можуть оброблятись в DBGrid1
Тепер є можливість виділяти відповідне поле (наприклад, Session.Year) і обробляти його зовнішній вигляд.
Також з допомогою мишки можна змінювати порядок слідування полів одного за одним. Простим перетягуванням впорядкуємо поля так як показано на рисунку 19. Таке впорядкування відповідає умові задачі.
Рис. 19. Впорядкування полів згідно з умовою задачі
Якщо виділити поле Session.Year, то в Object Inspector можна побачити, що йому відповідає об’єкт-змінна з іменем DBGrid1.Columns[0]. Аналогічно полю Semester відповідає об’єкт-змінна з іменем DBGrid1.Columns[1]. Так само зі зміщенням номерів колонок створюються об’єкти для інших полів.
Використовуючи ці об’єкти-змінні можна редагувати зовнішній вигляд колонок (полів), що відображаються в DBGrid1.
Так, наприклад, можна встановити центрування заголовків полів, текст заголовків полів, вирівнювання основних даних в полях та інше.
На рис. 20 видно як змінюється центрування заголовку компонента DBGrid1.
Рис. 20. Центрування заголовку
Після корегувань форми та усіх полів DBGrid1, форма додатку матиме приблизно такий вигляд (рис. 21).
Рис. 21. Форма додатку після редагування DBGrid1 та корегування форми