013 – Приклад обчислення загальної суми в таблиці бази даних Microsoft Access з використанням SQL-запиту. Компонент TDBText

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

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

У даній задачі, на прикладі таблиці Microsoft Access, обчислюється загальна сума з використанням SQL-запиту. Результат обчислення суми заноситься в компонент типу TDBText.

Використовуючи даний приклад, можна проводити різні числові обчислення над множиною записів заданого стовпця інших таблиць.

 

Умова задачі

Задано таблицю, сформовану засобами СКБД Microsoft Access. Таблиця містить дані з нарахованою заробітною платою працівників.

Таблиця має наступну структуру.

01_02_00_013_table_ua

У додатку повинна обчислюватись загальна нарахована сума одразу після його завантаження. Результат потрібно виводити в компонент типу 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_02u

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

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

Після вибору цієї властивості викликається редактор “String List Editor”, в якому потрібно ввести текст SQL-запиту (рис. 11).

Для обчислення суми потрібно ввести такий текст запиту:

SELECT
  SUM  ([Salary])  AS  [Сума]
FROM  Worker

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

01_02_00_013_11u

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

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

 

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

Компонент DBText1 призначений для відображення тільки одного значення. Цим значенням може бути результат функції агрегування або значення поточного запису деякого поля. Тому, в цьому компоненті передбачена властивість DataField (“Поле даних»). У цій властивості вказується поле, що повинно виводитись у DBText1.

У нашому випадку поле має назву «Сума». Ця назва була введена у тексті SQL-запиту.

01_02_00_013_13u

Рис. 13. Властивість DataField компонента DBText1

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

01_02_00_013_14u

Рис. 14. Відображення суми в компоненті DBText1

 

  1. Встановлення точності 2 знаки після коми у компоненті DBText1.

Оскільки компонент DBText1 отримує дані з компоненту ADOQuery1, то потрібно налаштувати компонент ADOQuery1.

Послідовність кроків наступна.

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

У редакторі полів викликати контекстне меню і в цьому меню вибрати команду «Add all fields” (рис. 15).

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

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

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

01_02_00_013_16u

Рис. 16. Встановлення виведення з точністю 2 знаки після коми в DBText1

 

  1. Запуск додатку на виконання.

Тепер можна запустити додаток на виконання.

 

Подібна задача

Приклад обчислення загальної суми в таблиці бази даних Microsoft Access без використання SQL-запиту.