Приклад обчислення загальної суми в таблиці бази даних Microsoft Access з використанням SQL-запиту. Компонент TDBText
Бувають випадки, коли в таблиці бази даних потрібно порахувати суму числових значень деякого стовпця. Для цього існують різні методи обчислення, один з яких базується на використанні відповідного SQL-запиту.
У даній задачі, на прикладі таблиці Microsoft Access, обчислюється загальна сума з використанням SQL-запиту. Результат обчислення суми заноситься в компонент типу TDBText.
Використовуючи даний приклад, можна проводити різні числові обчислення над множиною записів заданого стовпця інших таблиць.
Умова задачі
Задано таблицю, сформовану засобами СКБД Microsoft Access. Таблиця містить дані з нарахованою заробітною платою працівників.
Таблиця має наступну структуру.
У додатку повинна обчислюватись загальна нарахована сума одразу після його завантаження. Результат потрібно виводити в компонент типу TDBText.
Розв’язок
Створити додаток як Windows Forms Application.
Зберегти проект під довільним іменем.
- Побудова форми.
З панелі інструментів 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.
Рис. 2. Схема зв’язків між компонентами програми
- Підключення бази даних. Властивість ConnectionString компонента ADOConnection1.
Процес підключення додатку до бази даних Microsoft Access детально описаний тут.
Додаток до бази даних підключається з допомогою властивості ConnectionString компонента ADOConnection1 (рис. 3). У властивості ConnectionString вказується тип постачальника даних та повний шлях до файлу бази даних.
Рис. 3. Рядок ConnectionString компонента ADOConnection1
- Налаштування компонент форми.
Наступним кроком потрібно здійснити налаштування компонент між собою. Для цього слід виконати такі дії:
– у компоненті 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).
- Властивість Active компонента ADOTable1.
Для відображення даних в DBGrid1 потрібно виконати такі дії над компонентом ADOTable1 (рис. 4):
– виділити компонент ADOTable1;
– встановити властивість Active = true.
Після цього дані таблиці будуть відображені у DBGrid1.
Рис. 4. Властивість Active компонента ADOTable1
- Налаштування розмірів компонент та форми.
На цьому етапі здійснюється корегування розмірів та позицій компонент на формі за зразком показаним на рисунку 5.
- Приховування поля ID_Worker в DBGrid1.
Поле ID_Worker доцільно приховати, оскільки воно є ключовим полем. Для цього з контекстного менд потрібно викликати редактор полів «Fields Editor…” компонента ADOTable1. Виклик редактора зображений на рисунку 6.
Рис. 6. Виклик редактора «Fields Editor”
Відкриється вікно Form1.ADOTable1. У цьому вікні, з допомогою мишки, потрібно викликати контекстне меню. У контекстному меню вибрати команду «Add All fields».
У результаті вікно редактора прийме вигляд, як показано на рисунку 7.
Рис. 7. Редактор полів Form1.ADOTable1
У редакторі полів відображаються усі поля таблиці Worker. Щоб видалити поле ID_Worker потрібно на рядку ID_Worker зробити клік правою кнопкою «миші» і в контекстному меню вибрати команду Delete. Після цього можна закрити редактор Form1.ADOTable1.
У результаті, в таблиці DBGrid1 буде відображено тільки два поля (рис. 8).
Рис. 8. Відображення таблиці Worker з двома полями
- Встановлення фільтру виведення з двома знаками після коми в полі Salary.
Для того, щоб у полі Salary коректно відображалось значення суми (2 знаки після коми) потрібно виконати такі дії.
Виділити компонент ADOTable1. Викликати редактор полів “Fields Editor…” так як описано в пункті 6. У результаті відкриється список з двох полів Name і Salary. Виділити рядок з назвою Salary. В Object Inspector буде активовано об’єкт з іменем ADOTable1Salary.
Наступним кроком в Object Inspector у полі “Display Format” потрібно встановити значення «0.00» (рис. 9).
Рис. 9. Встановлення формату виведення у полі Salary об’єкта ADOTable1
Після виконаних дій, значення в полі Salary таблиці будуть виводитись з точністю 2 знаки після коми.
- Налаштування компоненту Label1.
У компоненті Label1 у властивості Caption потрібно ввести рядок «Сума = ».
- Властивість SQL компонента ADOQuery1.
Компонент DBGrid1 призначений для виведення суми на основі SQL-запиту. Сам SQL-запит формується у компоненті ADOQuery1 у властивості «SQL…” (рис. 10).
Рис. 10. Властивість SQL компонента ADOQuery1
Після вибору цієї властивості викликається редактор “String List Editor”, в якому потрібно ввести текст SQL-запиту (рис. 11).
Для обчислення суми потрібно ввести такий текст запиту:
SELECT SUM ([Salary]) AS [Сума] FROM Worker
Після цього набраний текст запиту потрібно підтвердити вибором команди (кнопки) «OK”.
Рис. 11. Текст SQL-запиту
У SQL-запиті викликається функція агрегування SUM мови SQL. Функція SUM обчислює суму записів заданого стовпця (стовпця «Salary»). Також у SQL-запиті формується нове поле з іменем «Сума” в якому відображається результат суми.
Функції агрегування забезпечують отримання деякої узагальненої інформації.
Мова SQL має й інші стандартні функції агрегування, які можна використовувати в програмах:
– COUNT – виконує підрахунок записів у таблиці або підрахунок ненульових значень в стовпці таблиці;
– MIN – повертає мінімальне значення в стовпці;
– MAX – повертає максимальне значення в стовпці;
– AVG – обчислює середнє значення для значень, що містяться у стовпці.
- Властивість Active компонента ADOQuery1.
Як було сказано вище, результат SQL-запиту відображається у компоненті DBText1. SQL-запит формується у компоненті ADOQuery1. Для того, щоб SQL-запит був доступний для відображення потрібно у компоненті ADOQuery1 властивість Active встановити у значення “true” (рис. 12).
Рис. 12. Властивість Active компонента ADOQuery1
- Властивість DataField компонента DBText1.
Компонент DBText1 призначений для відображення тільки одного значення. Цим значенням може бути результат функції агрегування або значення поточного запису деякого поля. Тому, в цьому компоненті передбачена властивість DataField (“Поле даних»). У цій властивості вказується поле, що повинно виводитись у DBText1.
У нашому випадку поле має назву «Сума». Ця назва була введена у тексті SQL-запиту.
Рис. 13. Властивість DataField компонента DBText1
Після встановлення поля DataField результат суми відобразиться в компоненті DBText1 (рис. 14).
Рис. 14. Відображення суми в компоненті DBText1
- Встановлення точності 2 знаки після коми у компоненті DBText1.
Оскільки компонент DBText1 отримує дані з компоненту ADOQuery1, то потрібно налаштувати компонент ADOQuery1.
Послідовність кроків наступна.
Викликати редактор полів “Form1.ADOQuery1” компонента ADOQuery1 з контекстного меню (див. п. 7).
У редакторі полів викликати контекстне меню і в цьому меню вибрати команду «Add all fields” (рис. 15).
Рис. 15. Команда «Add all fields” з редактора полів Form1.ADOQuery1
У результаті буде додано одне поле «Сума», яке формується в тексті SQL-запиту. Автоматично створюється об’єкт з іменем ADOQuery1Сума.
Після виділення поля «Сума», в Object Inspector потрібно встановити властивість DisplayFormat у значення «0.00» (рис. 16).
Рис. 16. Встановлення виведення з точністю 2 знаки після коми в DBText1
- Запуск додатку на виконання.
Тепер можна запустити додаток на виконання.
Подібна задача
Приклад обчислення загальної суми в таблиці бази даних Microsoft Access без використання SQL-запиту.