009 – Приклад створення розрахункових полів в компоненті TDBGrid – Delphi




Приклад створення розрахункових полів в компоненті TDBGrid

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

 

Умова задачі

Задано базу даних “01_02_00_009_mydb.mdb“, що містить три таблиці: Students, Marks, Groups.

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

Таблиця Students.

01_02_00_009_table01u

Таблиця Groups.

01_02_00_009_table02u

Таблиця Marks (Оцінки).

01_02_00_009_table03u

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

01_02_00_009_01_

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

Створити результуючу таблицю, що містить такі поля.

01_02_00_009_table04u

Поле Average повинно бути створене як розрахункове поле.

 

Виконання

  1. Завантажити Delphi.

Зберегти проект.

  1. Побудова форми.

Для розв’язання даної задачі використаємо такі компоненти:

– компонент типу TADOConnection для зв’язку з базою даних;

– компонент типу TADOQuery для організації запиту на мові SQL;

– компонент типу TDataSource для зв’язку набору даних з компонентом візуалізації даних TDBGrid;

– компонент типу TDBGrid для відображення результатів SQL-запиту, сформованому в компоненті TADOQuery.

Компоненти TADOConnection та TADOQuery розміщуються на вкладці dbGo палітри компонент Tool Palette (рис. 2).

01_02_00_009_02_

Рис. 2. Компоненти TADOConnection та TADOQuery

Компонент TDataSource розміщується на вкладці Data Access палітри компонент Tool Palette (рис. 3).

01_02_00_009_03_

Рис. 3. Компонент TDataSource

Компонент TDBGrid розміщується на вкладці Data Controls палітри компонент (рис. 4).

01_02_00_009_04_

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

Після розміщення компонент, форма додатку має вигляд як показано на рисунку 5.

01_02_00_009_05_

Рис. 5. Форма додатку після розміщення компонент типу TADOConnection, TADOQuery, TDataSource, TDBGrid

Як результат, система Delphi автоматично створює чотири об’єкти-змінні з іменами ADOConnection1, ADOQuery1, DataSource1, DBGrid1. З допомогою цих імен можна доступатись до властивостей та методів компонент. За бажанням, у полі Name в Object Inspector відповідного компонента, можна змінити ім’я об’єкту-змінної. Залишимо все як є.

 

  1. Підключення до бази даних.

Для підключення до бази даних необхідно заповнити властивість ConnectionString компонента TADOConnection. Процес підключення до бази даних детально описано тут. Підключення до бази даних відбувається як покроковий процес з допомогою майстра підключення і в даній статті детально не описується.

Як результат, маємо заповнену властивість ConnectionString компонента ADOConnection1. У цій властивості вказується розміщення файлу бази даних на диску та інші параметри.

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

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

Вибираємо компонент ADOQuery1. В Object Inspector вибираємо “…” напроти назви “SQL” (рис. 6).

01_02_00_009_06_

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

У результаті відкриється вікно редактора String List Editor (рис. 7).

01_02_00_009_07_

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

01_02_00_009_08_

Рис. 8. Редактор String List Editor

 

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

Для того, щоб дані відобразились в таблиці DBGrid1, встановлюємо властивість Active компонента ADOQuery1 в значення true (рис. 9).

01_02_00_009_09_

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

У результаті відобразяться усі поля, що закладені в тексті SQL-запиту. Розрахункове поле середнього арифметичного average також буде відображене.

 

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

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

Спочатку викликаємо редактор полів компонента ADOQuery1. Це робиться вибором команди “Fields Editor…” з контекстного меню, що викликається після натиску правою кнопкою мишки на компоненті ADOQuery1 (рис. 10).

01_02_00_009_10_

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

У вікні редактора Form1.ADOQuery1 робимо клік правою кнопкою мишки і вибираємо команду “Add All Fields…” (рис. 11).

01_02_00_009_11_

Рис. 11. Команда “Add All Fields…” додавання усіх полів з SQL-запиту

У результаті вікно редактора полів буде мати вигляд як показано на рисунку 12. Для кожного поля створюється відповідний об’єкт, який в Object Inspector можна обробляти. Наприклад, для поля Students.Name створюється об’єкт з іменем ADOQuery1StudentsName, для поля Marks.Mathematics створюється об’єкт з іменем ADOQuery1MarksMathematics і т.д.

01_02_00_009_12_

Рис. 12. Поля, що можна обробляти згідно SQL-запиту

Здійснимо налаштування виведення середнього балу з точністю 2 знаки після коми. Для цього, виділимо поле Average і в Object Inspector у властивості Display Format вводимо значення “.00” (рис. 13).

01_02_00_009_13_

Рис. 13. Поле Display Format об’єкта ADOQuery1Average

Закриваємо редактор полів компонента ADOQuery1.

 

  1. Редактор полів компонента DBGrid1.

Для кращої візуалізації даних з таблиці бази даних використовується редактор полів “Columns Editor…” компонента DBGrid1.

01_02_00_009_14_

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

У результаті відкриється вікно зображене на рисунку 15. У вікні з допомогою мишки викликаємо контекстне меню, в якому вибираємо Add All Fields.

01_02_00_009_15_

Рис. 15. Додавання усіх полів для обробки в DBGrid1

У результаті для візуальної обробки в DBGrid1 будуть додані усі поля, що відповідають відповідним полям компонента ADOQuery1 (рис. 16).

01_02_00_009_16_

Рис. 16. Поля, що повинні оброблятись в DBGrid1

Кожному полю відповідає об’єкт-змінна. Наприклад, полю “0 – Students.Name” відповідає об’єкт DBGrid1.Columns[0], полю “1 – Marks.Mathematics” відповідає об’єкт з іменем DBGrid1.Columns[1] і т.д.

У редакторі полів компонента DBGrid1 можна виконувати ряд операцій з відображення даних:

– встановлювати порядок чергування полів (стовпців) один за одним з допомогою простого перетягування мишкою;

– встановлювати вирівнювання тексту та заголовків таблиці, що відображається в DBGrid1;

– встановлювати різноманітні шрифти для відображення даних та налаштовувати їх колір;

– встановлювати ширину кожного поля та інше.