Пример создания расчетных полей в компоненте TDBGrid
Описывается процесс создания полей таблицы базы данных, значения которых рассчитываются в процессе выполнения приложения.
Условие задачи
Задана база данных с именем «01_02_00_009_mydb.mdb«, содержащая три таблицы: Students, Marks, Groups.
Структура таблиц следующая.
Таблица Students.
Таблица Group.
Таблица 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] – поле, в котором рассчитывается среднее арифметическое.
Строка
(Mathematics+Physics+Jurisprudence+PhysicalTraining)/4 AS [Average]
создает вычисляемое поле с именем 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;
– устанавливать разнообразные шрифты для отображения данных и настраивать их цвет;
– устанавливать ширину каждого поля и прочее.