009 — Пример создания вычисляемых полей в компоненте TDBGrid — Delphi




Пример создания расчетных полей в компоненте TDBGrid

Описывается процесс создания полей таблицы базы данных, значения которых рассчитываются в процессе выполнения приложения.

 

Условие задачи

Задана база данных с именем «01_02_00_009_mydb.mdb«, содержащая три таблицы: Students, Marks, Groups.

Структура таблиц следующая.

Таблица Students.

01_02_00_009_table01r

Таблица Group.

01_02_00_009_table02r

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

01_02_00_009_table03r

Таблицы связаны между собою по такой схеме (рис. 1).

01_02_00_009_01_

Рис. 1. Схема связей между таблицами

Создать результирующую таблицу, которая содержит такие поля.

01_02_00_009_table04r

Поле 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] – поле, в котором рассчитывается среднее арифметическое.

Строка

(Mathematics+Physics+Jurisprudence+PhysicalTraining)/4 AS   [Average]

создает вычисляемое поле с именем 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;

– устанавливать разнообразные шрифты для отображения данных и настраивать их цвет;

– устанавливать ширину каждого поля и прочее.