Компонент запроса
Компонент запроса предназначен для создания запроса 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;
Возвращается число обработанных при выполнении запроса записей.