011 — Delphi. Разработка приложения формирования SQL-запросов к таблице базы данных

Разработка приложения формирования SQL-запросов к таблице базы данных

Описывается процесс создания приложения, которое используется для исследования SQL-запросов к базе данных.

 

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

Задана база данных «01_02_00_011_mydb.mdb«, содержащая три таблицы: Students, Marks, Groups.

Структура таблиц следующая.

Таблица Students.

01_02_00_011_table01r

Таблица Group.

01_02_00_011_table02r

Таблица Marks.

01_02_00_011_table03r

Таблицы связаны между собою по такой схеме (рис. 1):

01_02_00_011_01_

Рис. 1. Схема связей между таблицами

Разработать приложение, которое будет формировать SQL-запросы к базе данных.

 

Выполнение

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

Сохранить проект в произвольной папке. Рекомендуется скопировать файл базы данных «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).

01_02_00_011_02_Рис. 2. Компоненты TADOConnection и TADOQuery

01_02_00_011_03_Рис. 3. Компонент типа TMemo на форме приложения

01_02_00_011_04_Рис. 4. Компонент типа TDBGrid

01_02_00_011_05_Рис. 5. Компонент типа TDataSource

В результате выполненных действий автоматически будут созданы объекты-переменные с такими именами: ADOConnection1, ADOQuery1, Memo1, DBGrid1, DataSource1.

 

  1. Подключение базы данных к приложению.

Чтобы подключить базу данных к приложению нужно вызвать команду «Edit ConnectionString» из контекстного меню, что вызывается кликом правой кнопкой мышки на компоненте ADOConnection1 (рис. 6). Процесс подключения к базе данных состоит из нескольких шагов, представлен в виде мастера и подробно описан здесь.

01_02_00_011_06_Рис. 6. Вызов мастера подключения к базе данных

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

 

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

С помощью Object Inspector устанавливаем такие свойства компонент:

– в компоненте ADOConnection1 свойство «LoginPrompt» установить в значение false (это необходимо во избежание запросов введения пароля во время доступа к базе данных);

– в компоненте Button1 свойство Caption установить в значение «Execute query» (выполнить запрос);

– в компоненте ADOQuery1 свойство Connection установить в значение ADOConnection1;

– в компоненте DataSource1 свойство DataSet установить в значение ADOQuery1;

– в компоненте DBGrid1 свойство DataSource установить в значение DataSource1.

После настройки свойств компонент главная форма приложения будет иметь вид как показано на рисунке 7.

01_02_00_011_07_Рис. 7. Главная форма приложения после настройки компонент

Теперь база данных подключена к приложению и можно создавать программный код активизации формы и клика на кнопке «Execute query«.

 

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

Для ввода текста SQL-запроса сначала нужно вызвать редактор кода на языке SQL компонента ADOQuery1 (рис. 8).

01_02_00_011_08_

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

В результате откроется окно редактора кода (рис. 9). В этом окне нужно набрать следующий текст:

SELECT *
FROM Student

01_02_00_011_09_Рис. 9. Окно редактора кода на языке SQL

 

  1. Программирование события активизации основной формы OnActivate.

Программируем событие активизации формы приложения. Это событие генерируется одним из первых, поэтому здесь нужно вписать код, который делает начальную инициализацию компонент. Процесс программирования события в Delphi подробно описан здесь.

Выделяем главную форму приложения и вызываем событие OnActivate из вкладки Events в Object Inspector (рис. 8).

01_02_00_011_10_Рис. 10. Вызов события OnActivate

Листинг процедуры обработки события следующий.

procedure TForm1.FormActivate(Sender: TObject);
begin
  Memo1.Lines.Clear; // очистить текст в Memo1
  Memo1.Lines.Assign(ADOQuery1.SQL); // Назначить текст SQL-запроса с ADOQuery1 в Memo1
  ADOQuery1.Open; // Выполнить SQL-запрос
end;

 

  1. Программирование события закрытия формы OnClose.

Событие OnClose формы вызовется в момент ее закрытия. Поэтому, здесь нужно вписать код закрытия соединения с базой данных.

В событие закрытия формы вносим следующий текст.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if ADOQuery1.Active then ADOQuery1.Close;
end;

В этом коде делается проверка на наличие открытия набора данных, и если этот набор открытый, то он закрывается методом Close в компоненте ADOQuery1.

 

  1. Программирование события 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;

 

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

После выполненных действий, приложение можно запустить на выполнение. Результат работы приложения изображен на рисунке 11. Как видно из рисунка 11, отображаются все поля из таблицы Student (рис. 11).

Текст SQL-запроса формируется в компоненте Memo1, а результат его выполнения отображается в компоненте DBGrid1.

01_02_00_011_11_Рис. 11. Результат выполнения приложения

Создадим другой SQL-запрос, который выводит студентов, которые имеют оценку 4 по математике.

SELECT *
FROM   Student, Marks
WHERE ([Student.ID_Student]=Marks.ID_Student) and
       (Marks.Mathematics = 4)

Результат выполнения приложения приведен на рисунке 12.

01_02_00_011_12_Рис. 12. Результат выполнения приложения