Лабораторная работа по курсу Базы данных.
SQL – запросы в DELPHI – среде с ADO – доступом к БД.
Время выполнения – 2 часа.
Исходные данные: База данных Магазин.mdb. Отлаженное приложение, выполненное в рамках лабораторной работы «Пользовательский интерфейс для заполнения таблицы, содержащей данные других таблиц».
Задание
Создайте Delphi - приложение, которое выполняет SQL- запросы к таблицам продаж SALES, товаров TOVAR и фирм FIRM с использованием ADO – доступа. Новая форма выполнения запросов должна иметь вид, представленный на Рис.1
Рис.1
Создание новой формы для отображения запросов и добавление ее к проекту.
1. Откройте Delphi – проект, созданный во время выполнения лабораторной работы «Пользовательский интерфейс для заполнения таблицы, содержащей данные других таблиц». Предварительно создайте копию папки, в которой он находится. Проект содержит четыре модуля Unit1, Unit2, Unit3, Unit4 и три формы Form1, Form3, Form4 с интерфейсными объектами.
2. Создайте новую форму для запросов – Form5: File/New/Form и установите ее свойство Caption равным «SQL – запросы с ADO – доступом к БД». Сохраните файлы этой формы и обновленный файл проекта.
3. Перейдите на главную форму Form3, войдите в редактор объекта MainMenu1 и включите в меню новую опцию SQL - ЗАПРОСЫ.
4. Подключите к модулю главной формы модуль формы запросов: File/Use Unit/ Unit5.
5. Для главной формы Form3 cоздайте событийную процедуру для события нажатия нового пункта меню SQL - ЗАПРОСЫ.
procedure TForm3.N6Click(Sender: TObject);
begin
// открыть форму SQL - запросов
Form5.ShowModal;
end;
6. Сохраните и запустите приложение.
Разработка интерфейса формы выполнения SQL – запросов.
7. Установите на форму Form5 интерфейсные объекты (Рис.1) и объекты доступа к БД из разделов ADO, Data Access, Standard и DataControls палитры компонентов, изображенные на рисунке 2.
|
Рис.2
8. Подключите к модулю формы Form5 модуль данных DM: File/Use Unit/ Unit2
9. Последовательно в инспекторе объектов установите следующие свойства для объектов доступа SQL - запросов:
Объект | Свойство | Значение |
ADOQuery1 | Connection | ADOConnection1 |
Parameters | R | |
DataSource1 | DataSet | ADOQuery1 |
10. Используя педаль поля Parameters, войдите в редактор параметров Editing Parameters и добавьте параметр R.
11. Установите у интерфейсных объектов следующие свойства:
Объект | Свойство | Значение |
Panel1 | Align | AlTop |
Caption | пусто | |
Panel2 | Align | AlClient |
Caption | пусто | |
DBGrid1 | DataSource | DataSource1 |
Edit1 | Text | пусто |
Font | 10, жирный | |
Edit2 | Text | пусто |
Font | 10, жирный | |
Button1 | Caption | Скоропортящиеся товары |
Button2 | Caption | Товары со сроком годности <= |
Button3 | Caption | Фрагмент названия для поиска товара |
Button4 | Caption | Итог по всем продажам |
Button5 | Caption | Итоги по каждому товару |
12. Сохраните и запустите приложение.
Создание SQL – запросов. Запрос на выборку.
13. Создайте событийную процедуру выполнения SQL – запроса, соответствующую нажатию на кнопку Button1 - Скоропортящиеся товары:
procedure TForm5.Button1Click(Sender: TObject);
Begin
With ADOQuery1 Do Begin
Close;
SQL.Clear;
SQL.Add (' SELECT Tovar_Name, Storage_Life FROM Tovar');
SQL.Add (' WHERE Flag = True ORDER BY Tovar_Name');
Open;
End;
DBGrid1.Columns[0].Title.Caption:= 'Товар';
DBGrid1.Columns[1].Title.Caption:= 'Срок годности';
end;
14. Испытайте запрос и сохраните приложение.
Запросы на выборку с параметром
15. Создайте событийную процедуру выполнения SQL – запроса, соответствующую нажатию на кнопку Button2 – Т овары со сроком годности <=. Запрос содержит параметр R, значение которого выбирается из поля Edit1:
|
procedure TForm5.Button2Click(Sender: TObject);
begin
With ADOQuery1 Do Begin
Close;
SQL.Clear;
SQL.Add ('SELECT Tovar_Name,Storage_Life FROM Tovar');
SQL.Add (' WHERE Storage_Life <=:R ORDER BY Tovar_Name');
Parameters[0].Value:= Edit1.Text;
Open;
End;
DBGrid1.Columns[0].Title.Caption:= 'Товар';
DBGrid1.Columns[1].Title.Caption:= 'Срок годности';
end;
16. Испытайте запрос и сохраните приложение.
17. Создайте событийную процедуру выполнения SQL – запроса, соответствующую нажатию на кнопку Button3 – П оиск товара по названию. Запрос содержит параметр R, значение которого выбирается из поля Edit2:
procedure TForm5.Button3Click(Sender: TObject);
begin
With ADOQuery1 Do Begin
Close;
SQL.Clear;
SQL.Add ('SELECT Tovar_Name,Storage_Life, Flag FROM Tovar ');
SQL.Add (' WHERE Tovar_Name Like:R ORDER BY Tovar_Name ');
Parameters[0].Value:= '%'+Edit2.Text+'%';
// '%' означает любой текст
Open;
End;
DBGrid1.Columns[0].Title.Caption:= 'Товар';
DBGrid1.Columns[1].Title.Caption:= 'Срок годности';
end;
18. Испытайте запрос и сохраните приложение.
Групповой запрос.
19. Создайте событийную процедуру выполнения группового SQL – запроса суммирования денег по всем продажам, соответствующую нажатию на кнопку Button4 – Итог по всем продажам:
procedure TForm5.Button4Click(Sender: TObject);
begin
With ADOQuery1 Do Begin
Close;
SQL.Clear;
SQL.Add ('SELECT Sum (Price * Quantity) FROM Sales ');
Open;
End;
DBGrid1.Columns[0].Title.Caption:= 'ИТОГО';
end;
20. Испытайте запрос и сохраните приложение.
Запрос на выборку по двум таблицам с группировкой.
21. Создайте событийную процедуру выполнения SQL – запроса, соответствующую нажатию на кнопку Button5 – Итоги по каждому товару. Этот запрос строится на основе объединения (INNER JOIN) двух таблиц БД – Tovar и Sales. Данные сортируются(ORDER BY) и группируются(GROUP BY) по названиям товаров. Стоимости товаров с общим названием суммируются (Sum).
|
procedure TForm5.Button5Click(Sender: TObject);
begin
With ADOQuery1 Do Begin
Close;
SQL.Clear;
SQL.Add(' SELECT Tovar.Tovar_Name, Sum (Sales.Quantity * Sales.Price)');
SQL.Add(' FROM Tovar INNER JOIN Sales ON Tovar.Tovar_ID = Sales.Tovar_ID');
SQL.Add('GROUP BY Tovar.Tovar_Name ORDER BY Tovar.Tovar_Name');
Open;
End;
DBGrid1.Columns[0].Title.Caption:= 'Товар';
DBGrid1.Columns[1].Title.Caption:= 'СУММА Итого';
end;
22. Испытайте запрос и сохраните приложение.