Компонент запроса

Компонент запроса предназначен для создания запроса SQL, подготовки его параметров, передачи запроса на сервер БД и представления результата запроса в наборе данных. При этом набор данных может быть редактируемым или нет.

Любой компонент запроса, каждая строка набора данных которого однозначно связывается с одной строкой таблицы БД, может редактироваться. Например, запрос

SELECT * FROM Country

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

SELECT CustNo, SUM(AmountPaid) 

FROM Orders

 GROUP BY CustNo

Ведь в таком запросе каждая запись есть результат суммирования неизвестного заранее числа других записей.

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

В целом компонент запроса работает быстрее, т. к. структура возвращаемых запросом полей может изменяться, то экземпляры класса TFieldDef, хранящие информацию о свойствах полей, создаются по необходимости при запуске приложения. Табличный компонент создает все классы для описания полей в любом случае, поэтому в приложениях клиент-сервер табличный компонент может открываться медленнее, чем запрос. Рассмотрим общие свойства и методы компонентов запросов. Текст запроса определяется свойством

property SQL: TStrings; 

В свойстве

property Text: PChar;

содержится окончательно подготовленный текст запроса перед пересылкой его на сервер.

Выполнение запроса возможно тремя способами.

Если запрос возвращает результат в набор данных, то применяется метод

procedure Open; 

или свойство

property Active: Boolean;

которому присваивается значение True. После выполнения запроса открывается набор данных компонента. Закрывается такой запрос методом

procedure Close;

или тем же свойством Active.

Если запрос не возвращает результат в набор данных (например, использует операторы INSERT, DELETE, UPDATE), то используется метод

procedure ExecSQL;

и после выполнения запроса набор данных компонента не открывается.

Попытка использовать для такого запроса метод open или свойство Active приведет к ошибке создания указателя на курсор данных.

После выполнения запроса в свойстве

property RowsAffected: Integer;

возвращается число обработанных при выполнении запроса записей.

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

property RequestLive: Boolean;

присвоить значение True. Это свойство устанавливается, но не работает для запроса, результат которого не модифицируется из-за самого запроса.

Для подготовки запроса к выполнению предназначен метод

procedure Prepare;

который обеспечивает выделение необходимых ресурсов на сервере и проведение оптимизации.

Метод

procedure UnPrepare;

освобождает занятые при подготовке запроса ресурсы.

Результат выполнения этих двух операций отражается в свойстве

property Prepared: Boolean;

Значение True данного свойства говорит о том, что запрос подготовлен для выполнения.

Вызов методов Prepare и UPРrераrе не является обязательным, т. к. компонент делает это автоматически. Однако если запрос будет выполняться несколько раз подряд, то подготовку необходимо провести перед первым выполнением запроса вручную. Тогда при последующих выполнениях сервер не будет тратить время на проведение бесполезной операции — ведь ресурсы под запрос уже были выделены.

Часто запросы имеют настраиваемые параметры, значения которых определяются непосредственно перед выполнением запроса.

Свойство

property Params: TParams;

представляет собой список объектов TParams, каждый из которых содержит настройки одного параметра. Свойство Params обновляется автоматически при изменении текста запроса. Подробнее о классе TParams рассказывается ниже в этой главе.

Примечание 

В компоненте TADOQuery свойство, аналогичное описанному свойству Params, называется Parameters.

Свойство

property ParamCount: Word

возвращает число параметров запроса.

Свойство

property ParamCheck: Boolean;

определяет, необходимо ли обновлять свойство Params при изменении текста запроса во время выполнения. При значении True обновление осуществляется.

Кроме этого, компоненты запросов содержат некоторые свойства и методы, описываемые в гл. 14.