Друзья
Друзья


Организация запросов к БД (Delphi + Microsoft SQL Server) Delphi

Предыдущая статья >> [Компоненты доступа к данным]

Организация запросов к БД

Рассмотрим особенности вызова запросов к БД из приложения. Различают три вида запросов:
Статические запросы – текст запроса полностью формируется на этапе разработки приложения;
Параметрические запросы – текст запроса формируется на этапе разработки приложения и содержит несколько параметров, во время выполнения приложения можно задавать значения параметров;
Динамические запросы – текст запроса полностью формируется на этапе выполнения приложения.
При использовании технологии BDE для выполнения запросов применяется компонент TQuery. При использовании технологии ADO для выполнения запросов могут применяться следующие компоненты:
Компонент TADOQuery – аналог компонента TQuery. Является наиболее универсальным. Позволяет выполнять любые SQL запросы, включая операторы SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, EXECUTE и др. Текст запроса размещается в свойстве SQL. Содержит свойство Active логического типа, позволяющее выполнить запрос, возвращающий набор данных (оператор SELECT). Метод ExecSQL позволяет выполнить запрос, не возвращающий набор данных.
Компонент TADODataSet – специализированный компонент для организации запросов на выборку с использованием оператора SELECT. Компонент не позволяет выполнять операторы, не возвращающие наборы данных, такие как: INSERT, UPDATE, DELETE, CREATE TABLE и т.п. Содержит удобный редактор, упрощающий конструирование запросов на выборку. Для вызова редактора используется свойство CommandText. Для выполнения запроса используется свойство Active.
Компонент TADOCommand – специализированный компонент для организации запросов, не возвращающих набор данных, таких как: INSERT, UPDATE, DELETE, CREATE TABLE и т.п. Компонент не позволяет выполнять оператор SELECT. Метод Execute позволяет выполнить запрос.
Далее рассмотрим порядок организации запросов из приложений БД на основе технологии ADO.

Технология доступа к базам данных ADO

Технология ADO (ActiveX Data Objects) обеспечивает более простое подключение к БД, чем технология BDE. Для подключения к БД не требуется создавать псевдоним, как в технологии BDE – достаточно правильно настроить соединение с помощью компонента TADOConnection.
Компонент TADOConnection содержит следующие основные свойства:
ConnectionString – позволяет задать параметры соединения с БД. Для удобства настройки параметров можно использовать специальный мастер.
Connected – активизирует соединение с БД при задании значения true.
LoginPrompt. Если задано значение false, то при подключении к БД не будет выводится диалоговое окно с требование ввести имя и пароль пользователя. Имя и пароль будет взято из свойства ConnectionString. Если задано значение true, то имя пользователя и пароль всегда будут запрашиваться с помощью диалогового окна.
Пусть требуется установить соединение с БД Supply. Настроем соединение с помощью компонента TADOConnection. Зайдем в мастер подключения, дважды щелкнув мышкой по компоненту. В открывшемся окне выберем радио кнопку Use Connection String и нажмем кнопку Build (можно также подгрузить параметры соединения из специального файла *.udl, выбрав радио кнопку Use Data Link File).
Далее в диалоговом окне на вкладке Поставщик данных выберем тип провайдера БД, в нашем случае Microsoft OLE DB Provider for SQL Server (рисунок 1). На вкладке Подключение зададим параметры соединения с БД: адрес SQL-сервера, имя и пароль пользователя, имя БД (рисунок 2). После задания настроек нажмем кнопку OK.
Для активизации соединения зададим значение true для свойства Connected.
Компоненты TADOQuery, TADODataSet и TADOCommand содержат свойство Connection, с помощью которого подключаются к компоненту TADOConnection.
Далее рассмотрим примеры организации различных видов запросов с помощью наиболее универсального компонента TADOQuery.



Выполнение статических запросов

Создадим приложение, позволяющее выполнять статический запрос. Например, вывести всю информацию о поставщике Иванов. Для этого выполним следующее:
1. В новом каталоге создадим новый проект.
2. Организуем статический запрос. Для этого необходимо:
поместить на форму компоненты TADOConnection, TADOQuery, TDataSource и TDBGrid, задать им соответствующие имена, например, ADOConnection, QueryStatic, DataSource, DBGrid (рисунок 3);
связать их между собой;
связать компонент ADOConnection с БД Supply;
задать свойство SQL компонента QueryStatic, введя в него текст запроса на выборку, например:
SELECT *
FROM Поставщики
WHERE Наименование=’Иванов’



просмотреть результаты запроса, установив у компонента QueryStatic свойство Active = true;
запустить приложение.



Выполнение параметрических запросов

Создадим приложение, позволяющее выполнять параметрический запрос. Например, вывести всю информацию о поставщике с заданной фамилией. Для этого выполним следующее:
1. В новом каталоге создадим новый проект.
2. Организуем параметрический запрос. Для этого необходимо:
поместить на форму компоненты TADOConnection, TADOQuery, TDataSource и TDBGrid, TEdit и TButton задать им соответствующие имена, например, QueryParams, DataSource, DBGrid, EditParams, ButtonQuery;
связать их между собой;
связать компонент ADOConnection с БД Supply;
задать свойство SQL компонента QueryParams, введя в него текст запроса на выборку, например:
SELECT *
FROM Поставщики
WHERE Наименование=:name



Обратите внимание, что имена параметров в SQL-запросе должны начинаться с двоеточия;
для кнопки ButtonQuery написать обработчик, который, будет считывать значение параметра из поля ввода EditParams, присваивать значение параметру SQL-запроса и выполнять запрос.
Пример кода для Borland C++ Builder:
// Закрыть запрос
QueryParams->Close();
// Считать из поля ввода значение параметра
// под названием param
QueryParams->ParamByName("name")->AsString =
EditParams->Text;
try{
// Выполнить запрос
QueryParams->Open();
}
// Обработать возможные ошибки
// при выполнении запроса
catch(EDBEngineError*)
{
Application->MessageBox("Не могу выполнить
запрос", "Ошибка", MB_OK);
}




Пример кода для Borland Delphi:
// Закрыть запрос
QueryParams.Close;
// Считать из поля ввода значение параметра
// под названием param
QueryParams.Parameters.ParamByName('name').Value :=
EditParams.Text;
try
// Выполнить запрос
QueryParams.Open;
// Обработать возможные ошибки
// при выполнении запроса
except
application.MessageBox('Не могу выполнить запрос','Ошибка',MB_OK);
end;



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



Выполнение динамических запросов

Создадим приложение, позволяющее выполнять динамический запрос. Например, вывести всю информацию о поставщике с заданной фамилией. Для этого выполним следующее:
1. В новом каталоге создадим новый проект.
2. Организуем динамический запрос. Для этого необходимо:
поместить на форму компоненты TADOConnection, TADOQuery, TDataSource и TDBGrid, TEdit и TButton задать им соответствующие имена, например, ADOConnection, QueryDynamic, DataSource, DBGrid, EditName, ButtonQuery;
связать их между собой;
связать компонент ADOConnection с БД Supply;
для кнопки ButtonQuery написать обработчик, который, будет считывать значение из поля ввода EditParams, формировать текст SQL-запроса на выборку для компонента QueryDynamic с учетом значения поля ввода и выполнять запрос.
Пример кода для Borland C++ Builder:

// Необходимо подключить заголовок библиотеки
// Для использования функции sprintf
#include "stdio.h"
//...
// Строка с текстом запроса
char sql[255];
// Закрыть запрос
QueryDynamic->Close();
// Очистить массив строк для размещения
// текста запроса
QueryDynamic->SQL->Clear();
// Сформировать строку с текстом запроса
sprintf(sql,"SELECT * FROM Поставщики
WHERE [Наименование] = '%s'",
EditName->Text.c_str());
// Вывести текст запроса на экран
Application->MessageBox(sql, "Текст запроса",
MB_OK);
// Добавить стоку с текстом запроса
QueryDynamic->SQL->Add(sql);
try{
// Выполнить запрос
QueryDynamic->Open();
}
// Обработать возможные ошибки
// при выполнении запроса
catch(EDBEngineError*){
Application->MessageBox(
"Не могу выполнить запрос", "Ошибка",MB_OK);
}




Пример кода для Borland Delphi:
// Строка с текстом запроса
sql:string;
begin
// Закрыть запрос
QueryDynamic.Close;
// Очистить массив строк для размещения
// текста запроса
QueryDynamic.SQL.Clear;
// Сформировать строку с текстом запроса
sql:= 'SELECT * FROM Поставщики WHERE [Наименование] = '''+ EditName.Text + '''';
// Вывести текст запроса на экран
application.MessageBox(PChar(sql), 'Текст запроса',MB_OK);
// Добавить стоку с текстом запроса
QueryDynamic.SQL.Add(sql);
try
// Выполнить запрос
QueryDynamic.Open;
// Обработать возможные ошибки
// при выполнении запроса
except
application.MessageBox( 'Не могу выполнить запрос', 'Ошибка',MB_OK);
end;



запустить приложение. Убедиться в работоспособности запроса. Обратите внимание, что в процессе выполнения обработчика кнопки выводится окно с текстом сформированного запроса (рисунок 5). Результат выполнения динамического запроса совпадает с результатом выполнения запроса с параметрами, приведенным на рисунке 4.



Следующая статья >> [Вызов хранимых процедур из приложения с использованием технологии ADO]
 
Самое популярное
Яндекс.Метрика