Разработка приложения формирования SQL-запросов к таблице базы данных
Описывается процесс создания приложения, которое используется для исследования SQL-запросов к базе данных.
Условие задачи
Задана база данных «01_02_00_011_mydb.mdb«, содержащая три таблицы: Students, Marks, Groups.
Структура таблиц следующая.
Таблица Students.
Таблица Group.
Таблица Marks.
Таблицы связаны между собою по такой схеме (рис. 1):
Рис. 1. Схема связей между таблицами
Разработать приложение, которое будет формировать SQL-запросы к базе данных.
Выполнение
Сохранить проект в произвольной папке. Рекомендуется скопировать файл базы данных «01_02_00_011_mydb.mdb» в папку, в которой размещаются рабочие файлы нашего проекта.
2. Построение формы.
Сначала нужно увеличить размер формы с помощью «мышки».
Следующим шагом размещаем на форме такие компоненты:
– из вкладки dbGo компонент TADOConnection (рис. 2);
– из вкладки dbGo компонент TADOQuery (рис. 2);
– из вкладки Standard компоненты типа TButton и TMemo (рис. 3);
– из вкладки Data Controls компонент типа TDBGrid (рис. 4);
– из вкладки Data Access компонент типа TDataSource (рис. 5).
Рис. 2. Компоненты TADOConnection и TADOQuery
Рис. 3. Компонент типа TMemo на форме приложения
Рис. 4. Компонент типа TDBGrid
Рис. 5. Компонент типа TDataSource
В результате выполненных действий автоматически будут созданы объекты-переменные с такими именами: ADOConnection1, ADOQuery1, Memo1, DBGrid1, DataSource1.
- Подключение базы данных к приложению.
Чтобы подключить базу данных к приложению нужно вызвать команду «Edit ConnectionString» из контекстного меню, что вызывается кликом правой кнопкой мышки на компоненте ADOConnection1 (рис. 6). Процесс подключения к базе данных состоит из нескольких шагов, представлен в виде мастера и подробно описан здесь.
Рис. 6. Вызов мастера подключения к базе данных
После подключения базы данных к приложению нужно настроить свойства других компонент, чтобы получить отображение базы данных
- Настройка свойств компонент.
С помощью Object Inspector устанавливаем такие свойства компонент:
– в компоненте ADOConnection1 свойство «LoginPrompt» установить в значение false (это необходимо во избежание запросов введения пароля во время доступа к базе данных);
– в компоненте Button1 свойство Caption установить в значение «Execute query» (выполнить запрос);
– в компоненте ADOQuery1 свойство Connection установить в значение ADOConnection1;
– в компоненте DataSource1 свойство DataSet установить в значение ADOQuery1;
– в компоненте DBGrid1 свойство DataSource установить в значение DataSource1.
После настройки свойств компонент главная форма приложения будет иметь вид как показано на рисунке 7.
Рис. 7. Главная форма приложения после настройки компонент
Теперь база данных подключена к приложению и можно создавать программный код активизации формы и клика на кнопке «Execute query«.
- Настройка свойства SQL компонента ADOQuery1.
Для ввода текста SQL-запроса сначала нужно вызвать редактор кода на языке SQL компонента ADOQuery1 (рис. 8).
Рис. 8. Свойство SQL компонента ADOQuery1
В результате откроется окно редактора кода (рис. 9). В этом окне нужно набрать следующий текст:
SELECT *
FROM Student
Рис. 9. Окно редактора кода на языке SQL
- Программирование события активизации основной формы OnActivate.
Программируем событие активизации формы приложения. Это событие генерируется одним из первых, поэтому здесь нужно вписать код, который делает начальную инициализацию компонент. Процесс программирования события в Delphi подробно описан здесь.
Выделяем главную форму приложения и вызываем событие OnActivate из вкладки Events в Object Inspector (рис. 8).
Рис. 10. Вызов события OnActivate
Листинг процедуры обработки события следующий.
procedure TForm1.FormActivate(Sender: TObject);
begin
Memo1.Lines.Clear; // очистить текст в Memo1
Memo1.Lines.Assign(ADOQuery1.SQL); // Назначить текст SQL-запроса с ADOQuery1 в Memo1
ADOQuery1.Open; // Выполнить SQL-запрос
end;
- Программирование события закрытия формы OnClose.
Событие OnClose формы вызовется в момент ее закрытия. Поэтому, здесь нужно вписать код закрытия соединения с базой данных.
В событие закрытия формы вносим следующий текст.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ADOQuery1.Active then ADOQuery1.Close;
end;
В этом коде делается проверка на наличие открытия набора данных, и если этот набор открытый, то он закрывается методом Close в компоненте ADOQuery1.
- Программирование события OnClick компонента Button1.
Чтобы дать команду на выполнение SQL-запроса с Memo1, нужно запрограммировать событие OnClick компонента Button1.
Листинг процедуры обработки события следующий.
procedure TForm1.Button1Click(Sender: TObject);
begin
if ADOQuery1.Active then ADOQuery1.Close; // ли закрытое соединение?
ADOQuery1.SQL.Clear; // очистка предшествующего текста SQL-запроса
ADOQuery1.SQL.Assign(Memo1.Lines); // установление текста нового SQL-запроса
ADOQuery1.Open; // выполнение запроса
end;
- Запуск приложения.
После выполненных действий, приложение можно запустить на выполнение. Результат работы приложения изображен на рисунке 11. Как видно из рисунка 11, отображаются все поля из таблицы Student (рис. 11).
Текст SQL-запроса формируется в компоненте Memo1, а результат его выполнения отображается в компоненте DBGrid1.
Рис. 11. Результат выполнения приложения
Создадим другой SQL-запрос, который выводит студентов, которые имеют оценку 4 по математике.
SELECT *
FROM Student, Marks
WHERE ([Student.ID_Student]=Marks.ID_Student) and
(Marks.Mathematics = 4)
Результат выполнения приложения приведен на рисунке 12.