013 — Пример вычисления общей суммы в таблице базы данных Microsoft Access с использованием SQL-запроса. Компонент TDBText




Пример вычисления общей суммы в таблице базы данных Microsoft Access с использованием SQL-запроса. Компонент TDBText

Бывают случаи, когда в таблице базы данных нужно сосчитать сумму числовых значений некоторого столбца. Для этого существуют разные методы вычисления, один из которых базируется на использовании соответствующего SQL-запроса.

В данной задаче, на примере таблицы Microsoft Access, вычисляется общая сумма с использованием SQL-запроса. Результат вычисления суммы заносится в компонент типа TDBText.

Используя данный пример, можно производить числовые вычисления над множеством записей заданного столбца.

 

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

Дана таблица, сформированная средствами СУБД Microsoft Access. Таблица содержит данные с начисленной заработной платой работников предприятия.

Таблица имеет следующую структуру.

01_02_00_013_table_ru

Приложение должно вычислять суммарную заработную плату всех работников предприятия. Результат суммы должен выводиться в компоненте типа TDBText сразу после загрузки приложения.

 

Решение

  1. Загрузить Delphi.

Создать приложение как Windows Forms Application.

Сохранить проект под любым именем.

 

  1. Построение формы.

Из панели инструментов Tool Palette нужно разместить на форме следующие компоненты (рис. 1):

– из вкладки “dbGo” компонент TADOConnection. Создается объект с именем ADOConnection1. Этот компонент нужен для связи других компонент с файлом базы данных;

– из вкладки “Data Access” компонент TDataSource. Создается объект с именем DataSource1. Этот компонент связывает таблицу базы данных ADOTable1 с компонентом визуализации данных DBGrid1;

– из вкладки «Data Access” компонент типа TDataSource. Создается объект с именем DataSource2. Этот компонент нужен для связи компонента ADOQuery1 с компонентом DBText1;

– из вкладки “dbGo” компонент типа TADOTable. Создается объект с именем ADOTable1. Этот компонент соответствует таблице Workers базы данных;

– из вкладки «dbGo» компонент типа TADOQuery. Этот компонент нужен для формирования SQL-запроса и отображения результата этого запроса в компоненте TDBText;

– из вкладки “Data Controls” компонент типа TDataGrid. Создается объект с именем DBGrid1. Этот компонент отображает таблицу Workers базы данных;

– из вкладки «Data Controls” компонент типа TDBText. Создается объект с именем DBText1. Этот компонент отображает результат SQL-запроса, который формируется в компоненте ADOQuery1.

Результирующая сумма будет выводиться в компоненте DBText1.

Схема связей между компонентами изображена на рисунке 2.

01_02_00_013_01_Рис. 1. Компоненты формы

 

01_02_00_013_02rРис. 2. Схема связей между компонентами программы

 

  1. Подключение базы данных. Свойство ConnectionString компонента ADOConnection1.

Процесс подключения приложения к базе данных Microsoft Access подробно описан здесь.

Приложение к базе данных подключается с помощью свойства ConnectionString компонента ADOConnection1 (рис. 3). В свойстве ConnectionString указывается тип поставщика данных и полный путь к файлу базы данных.

01_02_00_013_03_Рис. 3. Строка ConnectionString компонента ADOConnection1

 

  1. Настройка компонент формы.

Следующим шагом нужно осуществить настройку компонент между собой. Для этого нужно установить:

– в компоненте ADOConnection1 свойство LoginPrompt = “false” (запрет постоянного ввода имени пользователя и пароля при подключении к базе данных);

– в компоненте ADOTable1 свойство Connection = «ADOConnection1”;

– в компоненте ADOQuery1 свойство Connection = “ADOConnection1”;

– в компоненте DataSource1 свойство DataSet = “ADOTable1”;

– в компоненте DataSource2 свойство DataSet = «ADOQuery1”;

– в компоненте DBGrid1 свойство DataSource = “DataSource1”;

– в компоненте DBText1 свойство DataSource = “DataSource2”;

– в компоненте ADOTable1 свойство TableName = “Worker”;

– в компоненте DBGrid1 из свойства Options установить опцию dgEditing = false (запрет внесения данных в ячейки таблицы непосредственно из сетки DBGrid1).

 

  1. Свойство Active компонента ADOTable1.

Для отображения данных в DBGrid1 нужно выполнить следующие действия над компонентом ADOTable1 (рис. 4):

– выделить компонент ADOTable1;

– установить свойство Active в значение true.

После этого данные таблицы будут отображены в DBGrid1.

01_02_00_013_04_Рис. 4. Свойство Active компонента ADOTable1

 

  1. Настройка размеров компонент и формы.

На этом этапе осуществляется корректировка размеров и позиций компонент на форме согласно образцу, показанному на рисунке 5.

01_02_00_013_05_Рис. 5. Основная форма приложения

 

  1. Скрытие поля ID_Worker в DBGrid1.

Поле ID_Worker целесообразно скрыть, поскольку оно есть ключевым полем. Для этого из контекстного меню нужно вызвать редактор полей «Fields Editor” компонента ADOTable1. Вызов редактора изображен на рисунке 6.

01_02_00_013_06_Рис. 6. Вызов редактора «Fields Editor

Откроется окно Form1.ADOTable1. В этом окне, с помощью мышки, нужно вызвать контекстное меню. В контекстном меню выбрать команду «Add All fields».

В результате окно редактора примет вид, как показано на рисунке 7.

01_02_00_013_07_Рис. 7. Редактор полей Form1.ADOTable1

В редакторе полей отображаются все поля таблицы Worker. Чтобы удалить поле ID_Worker нужно на строке ID_Worker сделать клик правой кнопкой «мыши» и в контекстном меню выбрать команду Delete. После этого можно закрыть редактора Form1.ADOTable1.

В результате, в таблице DBGrid1 будет отображено только два поля (рис. 8).

01_02_00_013_08_Рис. 8. Отображение таблицы Worker с двумя полями

 

  1. Установка в поле Salary фильтра для отображения с двумя знаками после запятой.

Для того, чтобы в поле Salary корректно отображалось значение суммы (2 знака после запятой), нужно выполнить следующее.

Выделить компонент ADOTable1. Вызвать редактора полей “Fields Editor…” так как описано в пункте 6. В результате откроется список состоящий из двух полей Name и Salary. Выделить строку с названием Salary. В Object Inspector будет активирован объект с именем ADOTable1Salary.

Следующим шагом в Object Inspector в поле “Display Format” нужно установить значение «0.00» (рис. 9).

01_02_00_013_09_Рис. 9. Установка формата вывода в поле Salary объекта ADOTable1

После выполненных действий, значения в поле Salary таблицы будут выводиться с точностью 2 знака после запятой.

 

  1. Настройка компонента Label1.

В компоненте Label1 в свойстве Caption нужно ввести строку «Сумма = ».

 

  1. Свойство SQL компонента ADOQuery1.

Компонент DBGrid1 предназначен для вывода суммы на основе SQL-запроса. Сам SQL-запрос формируется в компоненте ADOQuery1 в свойстве «SQL…” (рис. 10).

01_02_00_013_10rРис. 10. Свойство SQL компонента ADOQuery1

После выбора этого свойства, вызовется редактор “String List Editor”, в котором нужно ввести текст SQL-запроса (рис. 11).

Для вычисления суммы нужно ввести следующий текст запроса:

SELECT

  SUM  ([Salary])  AS  [Сумма]

FROM  Worker

После этого набранный текст запроса нужно подтвердить выбором команды (кнопки) «OK”.

01_02_00_013_11rРис. 11. Текст SQL-запроса

В SQL-запросе будет вызвана функция агрегирования SUM, которая входит в синтаксис языка SQL. Функция SUM вычисляет сумму записей заданного столбца (столбца «Salary»). Также в SQL-запросе формируется новое поле с именем «Сумма” в котором отображается результат суммы.

Функции агрегирования обеспечивают получение некоторой обобщенной информации.

Язык SQL имеет и другие стандартные функции агрегирования, которые можно использовать в программах:

COUNT – выполняет подсчет записей в таблице или подсчет ненулевых значений в столбце таблицы;

MIN – возвращает минимальное значение в столбце;

MAX – возвращает максимальное значение в столбце;

AVG – вычисляет среднее значение для значений, которые помещаются в столбце.

 

  1. Свойство Active компонента ADOQuery1.

Как было сказано ранее, результат SQL-запроса отображается в компоненте DBText1. SQL-запрос формируется в компоненте ADOQuery1. Для того, чтобы SQL-запрос был доступен для отображения нужно в компоненте ADOQuery1 свойство Active установить в значение “true” (рис. 12).

01_02_00_013_12rРис. 12. Свойство Active компонента ADOQuery1

 

  1. Свойство DataField компонента DBText1.

Компонент DBText1 предназначен для отображения только одного значения. Этим значением может быть результат функции агрегирования или значение текущей записи некоторого поля. Поэтому, в этом компоненте предусмотрено свойство DataField (“Поле данных»). В этом свойстве указывается поле, которое должно выводиться в DBText1.

В нашем случае поле имеет название «Сумма». Это название было введено в тексте SQL-запроса.

01_02_00_013_13rРис. 13. Свойство DataField компонента DBText1

После установления поля DataField результат суммы отобразится в компоненте DBText1 (рис. 14).

01_02_00_013_14rРис. 14. Отображение суммы в компоненте DBText1

 

  1. Установка вывода результата с точностью 2 знака после запятой в компоненте DBText1.

Поскольку компонент DBText1 получает данные от компонента ADOQuery1, то нужно настроить компонент ADOQuery1.

Последовательность шагов следующая.

Вызвать редактор полей “Form1.ADOQuery1” компонента ADOQuery1 из контекстного меню (см. п. 7).

В редакторе полей вызвать контекстное меню и в этом меню выбрать команду «Add all fields” (рис. 15).

01_02_00_013_15rРис. 15. Команда «Add all fields” из редактора полей Form1.ADOQuery1

В результате будет добавлено одно поле «Сумма», которое формируется в тексте SQL-запроса. Автоматически создается объект с именем ADOQuery1Сумма.

После выделения поля «Сумма», в Object Inspector нужно установить свойство DisplayFormat в значение «0.00» (рис. 16).

01_02_00_013_16rРис. 16. Установка вывода результата с точностью 2 знака после запятой в DBText1

 

  1. Запуск приложения на выполнение.

Теперь можно запустить приложение на выполнение.

 

Смотрите также:

Пример вычисления общей суммы в таблице базы данных Microsoft Access без использования SQL-запроса.