Компонент TQuery
При использовании компонента TQuery подготовка и диспетчеризация запросов выполняется механизмом BDE. По своим свойствам и назначению компонент TQuery подобен компоненту ТТаЫе.
Отличие заключается только в способе получения данных: в ТТаЫе используются ,методы, инкапсулированные в классе ТТаЫе, a TQuery получает данные как результаты выполнения SQL-запросов.
Применение языка SQL позволяет легко решать задачи, которые сложно или вообще невозможно решить в рамках класса ТТаЫе. Поэтому компонент TQuery является гораздо более мощным и гибким инструментом для работы с базами данных. Основные свойства класса TQuery приведены в табл. 12.1.
Таблица 12.1.Основные свойства класса TQuery
Свойство Constrained | Тип Описание Boolean Определяет, можно (false) или нет (true) задавать полям набора данных значения, которые не соответствуют условиям отбора |
DataSource | TDataSource Источник данных, связанный с набором данных, поля которого используются в качестве параметров SQL -запроса |
ParamCheck | Boolean Определяет, следует ли обновлять параметры запроса при изменении свойства SQL во время выполнения программы |
ParamCount | Word Текущее количество параметров в запросе |
Params[lndex: Word] | TParams Массив параметров, используемых в SQL-запросе |
Prepared | Boolean Определяет, готов запрос к выполнению (true) или нет(false) |
RowsAffected | Integer Количество записей, измененных с момента последнего выполнения запроса |
SQL | TStrings Текст SQL-запроса |
Text | PChar Текст SQL-запроса, передаваемый BDE |
В классе TQuery имеется ряд также методов, которые довольно часто используются при работе с базами данных через SQL-запросы.
procedure ExecSQL:
Выполняет SQL-запрос, заданный в свойстве SQL. Обычно используется в тех случаях, когда в результате выполнения запроса данные не возвращаются (например, при выполнении команд INSERT, UPDATE, DELETE и CREATE TABLE).
Для выполнения команды SELECT необходимо использовать метод Open компонента TQuery.
function ParamByName (const Value: String): TParam:
Обеспечивает доступ к заданным параметрам по имени.
procedure Prepare:
Посылает запрос механизму BDE для подготовки к выполнению. Вызов данного метода перед выполнением запроса повышает скорость выполнения.
procedure UnPrepare:
Освобождает ресурсы, занятые при подготовке запроса к выполнению.
Рассмотрим возможность практического использования перечисленных выше компонентов. В дальнейшем полученные результаты пригодятся нам для изучения SQL-команд. В качестве исходных данных воспользуемся уже известной нам базой данных sales.mdb.
1. Для создания нового приложения выполните команду File > New VCL Form Application.
2. Разместите на форме компоненты TQuery и TDataSource. Последний необходим для связи набора данных с компонентами визуализации данных и расположен на вкладке Data Access палитры компонентов.
3. Подключите базу данных Sales. Поскольку эта процедура рассматривалась в главе 9 применительно к компоненту ТТаbе, здесь мы на ней останавливаться не будем.
В отличие от ТТаbе, класс TQuery не имеет свойств, в которых указывается связанная с ним таблица базы данных. При его использовании информация поступает в набор данных в результате выполнения SQL-запроса, заданного в свойстве SQL.
4. Для задания запроса щелкните на кнопке с многоточием в поле ввода свойства SQL инспектора объектов. При этом откроется окно текстового редактора, в котором формируется запрос. Сформируйте запрос, как показано на рис.1. Его назначение состоит в возвращении выборки данных, содержащей все поля и все записи таблицы Товары нашей базы данных.
Рис. 1. Окно редактора SQL-запросов
5. Щелкните на кнопке Code Editor. Текст запроса появится в окне редактора кода (рис.2), причем ключевые слова языка SQL будут выделены полужирным шрифтом, что снижает вероятность ошибок при написании запроса.
Рис. 2. Текст SQL-запроса в окне редактора кода
СОВЕТ. При использовании компонента доступа к данным ТОиегудля задания SQL-запроса можно применять визуальный редактор запросов SQL Builder, который вызывается командой SQL Builder контекстного меню компонента TQuery, помещенного на форму. Однако он плохо работает с базами данных, в которых имена полей заданы кириллицей (выдаются различные малопонятные сообщения об ошибках).
6. Выполните настройку источника данных TDataSource. Она производится так же, как в случае компонента ТТаbе — в свойстве DataSet указывается имя объекта доступа к данным (по умолчанию — Queryl).
Далее необходимо разместить на форме необходимые элементы управления и выполнить их настройку.
7. Выберите следующие элементы:
■ компонент ТМето — для отображения и редактирования текста запроса;
■ компонент TDBGrid — для отображения результатов выполнения запроса;
■ кнопку TButton — для подачи команды на выполнение запроса.
Примерный вариант размещения на форме необходимых компонентов показан на рис. 3.
Рис. 3. Размещение элементов управления на форме
8. Для настройки компонента визуализации полей базы данных TDBGrid в его свойстве DataSource укажите имя источника данных (по умолчанию — DataSourcel).
Следующий этап — реализация процедур открытия и закрытия набора данных.
Если в результате выполнения SQL-запроса возвращаются данные, для его выполнения необходимо воспользоваться методом Open класса TQuery. Данный метод следует выполнять при запуске приложения, например в обработчике события OnShow главной формы. При этом происходит выполнение запроса, заданного в свойстве SQL, а результаты его выполнения отображаются в сетке DBGridl.
9. При закрытии приложения следует закрыть и набор данных. Вызовите метод Open в обработчике события OnShow главной формы, а метод Close — в обработчике ее же события OnClose.
10. Осталось написать обработчик события OnClick для кнопки Выполнить запрос. Данная кнопка понадобится в дальнейшем для изменения текста запроса с последующим выполнением его без перекомпиляции программы.При щелчке на кнопке должен выполняться запрос. Будем полагать, что в результате выполнения запроса возвращаются данные. В этом случае при щелчке на кнопке следует передать текст запроса из компонента memSQL в свойство SQL компонента Queryl и открыть набор данных, вызвав метод Open компонента Query1.
11. Откомпилируйте и запустите приложение.
Текст модуля разработанной формы приведен в листинге.1.
Листинг 1.Главный модуль приложения
unit SQLjnain:
interface
uses
Windows, Messages. SysUtils. Classes. Graphics. Controls, Forms, Dialogs, Grids. DBGrids, Db. StdCtrls, ExtCtrls. DBTables;
type ,
TfrmMain = class(TF'orm)
Query1: TQuery:
DataSourcel: TDataSource;
DBGridl: TDBGrid;
memSQL: TMemo;
btnExecSQL: TButton;
procedure FormShow(Sender: TQbject);
procedure FormClose(Sender: TObject; var Action: TCloseAction):
procedure btnExecSQLClick(Sender: TObject): ' private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain:
implementation {$R *.DFM}
procedure TfrmMain,FormShow(Sender. TObject); begi n
memSQL.Lines.Clear:
memSQL.Lines.Assign(Queryl.SQL);
Query1.Open; end;
procedure TfrmMain.FormClose(Sender: TObject;
var Action: TCloseAction): begin
if Query1.Active then Query1.Close; end;
procedure TfrmMain.btnExecSQLClick(Sender: TObject): begin
if Queryl.Active then Query1.Close;
Queryl.SQL.Clear:
Queryl.SQL.Assign(memSQL.Lines);
Queryl.Open: end;
end.
После запуска приложения в компоненте DBGridl на форме отобразится информация, содержащаяся в таблице Товары базы данных sales.mdb (рис. 4).
Рис.4. Результат выполнения SQL-запроса
Вопросы для самоконтроля:
- Выборка данных
- Компоненты Delphi, работающие с базами данных через SQL-запросы
- Компоненты TQuery и TDataSource
- Реализация процедур открытия и закрытия набора данных
Дата добавления: 2015-10-21; просмотров: 1206;