Приклад створення розрахункових полів в компоненті TDBGrid
У даній роботі описується процес створення полів таблиці бази даних, значення яких розраховуються у процесі виконання додатку.
Умова задачі
Задано базу даних “01_02_00_009_mydb.mdb“, що містить три таблиці: Students, Marks, Groups.
Структура таблиць наступна.
Таблиця Students.
Таблиця Groups.
Таблиця Marks (Оцінки).
Таблиці зв’язані між собою за такою схемою (рис. 1):
Рис. 1. Схема зв’язків між таблицями
Створити результуючу таблицю, що містить такі поля.
Поле Average повинно бути створене як розрахункове поле.
Виконання
- Побудова форми.
Для розв’язання даної задачі використаємо такі компоненти:
– компонент типу TADOConnection для зв’язку з базою даних;
– компонент типу TADOQuery для організації запиту на мові SQL;
– компонент типу TDataSource для зв’язку набору даних з компонентом візуалізації даних TDBGrid;
– компонент типу TDBGrid для відображення результатів SQL-запиту, сформованому в компоненті TADOQuery.
Компоненти TADOConnection та TADOQuery розміщуються на вкладці dbGo палітри компонент Tool Palette (рис. 2).
Рис. 2. Компоненти TADOConnection та TADOQuery
Компонент TDataSource розміщується на вкладці Data Access палітри компонент Tool Palette (рис. 3).
Рис. 3. Компонент TDataSource
Компонент TDBGrid розміщується на вкладці Data Controls палітри компонент (рис. 4).
Рис. 4. Компонент TDBGrid з вкладки Data Controls
Після розміщення компонент, форма додатку має вигляд як показано на рисунку 5.
Рис. 5. Форма додатку після розміщення компонент типу TADOConnection, TADOQuery, TDataSource, TDBGrid
Як результат, система Delphi автоматично створює чотири об’єкти-змінні з іменами ADOConnection1, ADOQuery1, DataSource1, DBGrid1. З допомогою цих імен можна доступатись до властивостей та методів компонент. За бажанням, у полі Name в Object Inspector відповідного компонента, можна змінити ім’я об’єкту-змінної. Залишимо все як є.
Для підключення до бази даних необхідно заповнити властивість ConnectionString компонента TADOConnection. Процес підключення до бази даних детально описано тут. Підключення до бази даних відбувається як покроковий процес з допомогою майстра підключення і в даній статті детально не описується.
Як результат, маємо заповнену властивість ConnectionString компонента ADOConnection1. У цій властивості вказується розміщення файлу бази даних на диску та інші параметри.
- Властивість SQL компонента ADOQuery1.
Наступним кроком є формування SQL-запиту, в якому будуть вибиратись поля з таблиць згідно з умовою задачі, а також формуватись нове розрахункове поле. У розрахунковому полі має визначатись середній бал.
Вибираємо компонент ADOQuery1. В Object Inspector вибираємо “…” напроти назви “SQL” (рис. 6).
Рис. 6. Властивість SQL компонента ADOQuery1
У результаті відкриється вікно редактора String List Editor (рис. 7).
Рис. 7. Редактор для вводу запиту на мові SQL
У редакторі вводимо наступний текст SQL-запиту:
SELECT [Students.Name], [Marks.Mathematics], [Marks.Physics], [Marks.Jurisprudence], [Marks].[PhysicalTraining], (Mathematics+Physics+Jurisprudence+PhysicalTraining)/4 AS [Average] FROM [Students], [Marks] WHERE ([Students.ID_Student]=[Marks.ID_Student])
Пояснимо деякі моменти в тексті SQL-запиту.
Команда
SELECT ... FROM ... WHERE
означає, що потрібно вибрати з бази даних деяку інформацію використовуючи умову (слово WHERE).
Після слова SELECT задаються поля, що повинні бути відображені у компоненті DBGrid1 (згідно з умовою задачі):
– [Students.Name] – прізвище та ім’я студента;
– [Marks.Mathematics] – оцінка з математики;
– [Marks.Physics] – оцінка з фізики;
– [Marks.Jurisprudence] – оцінка з права;
– [Marks].[PhysicalTraining] – оцінка з фізичної культури;
– [Average] – поле, в якому розраховується середнє арифметичне.
Після слова FROM задаються таблиці бази даних, з яких отримується результуюча таблиця. У нашому випадку це таблиці Students та Marks.
Після слова WHERE задається умова вибору даних. У нашому випадку унікальний ідентифікатор студента в таблиці Students має співпадати з унікальним ідентифікатором студента в таблиці Marks. Це необхідно для уникнення повторень про оцінки студента при виведенні інформації.
Вікно SQL-редактора має вигляд (рис. 8).
Рис. 8. Редактор String List Editor
- Властивість Active компонента ADOQuery1.
Для того, щоб дані відобразились в таблиці DBGrid1, встановлюємо властивість Active компонента ADOQuery1 в значення true (рис. 9).
Рис. 9. Властивість Active компонента ADOQuery1
У результаті відобразяться усі поля, що закладені в тексті SQL-запиту. Розрахункове поле середнього арифметичного average також буде відображене.
- Редактор полів компонента ADOQuery1.
Як видно з рисунку 9, вигляд полів та записів, що відображаються у компоненті DBGrid1, не зовсім коректний. Тому спробуємо налаштувати ці поля для більш наочного відображення.
Спочатку викликаємо редактор полів компонента ADOQuery1. Це робиться вибором команди “Fields Editor…” з контекстного меню, що викликається після натиску правою кнопкою мишки на компоненті ADOQuery1 (рис. 10).
Рис. 10. Виклик редактора полів компонента ADOQuery1
У вікні редактора Form1.ADOQuery1 робимо клік правою кнопкою мишки і вибираємо команду “Add All Fields…” (рис. 11).
Рис. 11. Команда “Add All Fields…” додавання усіх полів з SQL-запиту
У результаті вікно редактора полів буде мати вигляд як показано на рисунку 12. Для кожного поля створюється відповідний об’єкт, який в Object Inspector можна обробляти. Наприклад, для поля Students.Name створюється об’єкт з іменем ADOQuery1StudentsName, для поля Marks.Mathematics створюється об’єкт з іменем ADOQuery1MarksMathematics і т.д.
Рис. 12. Поля, що можна обробляти згідно SQL-запиту
Здійснимо налаштування виведення середнього балу з точністю 2 знаки після коми. Для цього, виділимо поле Average і в Object Inspector у властивості Display Format вводимо значення “.00” (рис. 13).
Рис. 13. Поле Display Format об’єкта ADOQuery1Average
Закриваємо редактор полів компонента ADOQuery1.
- Редактор полів компонента DBGrid1.
Для кращої візуалізації даних з таблиці бази даних використовується редактор полів “Columns Editor…” компонента DBGrid1.
Рис. 14. Виклик редактора полів “Columns Editor…” компонента DBGrid1
У результаті відкриється вікно зображене на рисунку 15. У вікні з допомогою мишки викликаємо контекстне меню, в якому вибираємо Add All Fields.
Рис. 15. Додавання усіх полів для обробки в DBGrid1
У результаті для візуальної обробки в DBGrid1 будуть додані усі поля, що відповідають відповідним полям компонента ADOQuery1 (рис. 16).
Рис. 16. Поля, що повинні оброблятись в DBGrid1
Кожному полю відповідає об’єкт-змінна. Наприклад, полю “0 – Students.Name” відповідає об’єкт DBGrid1.Columns[0], полю “1 – Marks.Mathematics” відповідає об’єкт з іменем DBGrid1.Columns[1] і т.д.
У редакторі полів компонента DBGrid1 можна виконувати ряд операцій з відображення даних:
– встановлювати порядок чергування полів (стовпців) один за одним з допомогою простого перетягування мишкою;
– встановлювати вирівнювання тексту та заголовків таблиці, що відображається в DBGrid1;
– встановлювати різноманітні шрифти для відображення даних та налаштовувати їх колір;
– встановлювати ширину кожного поля та інше.