Иллюстрированный самоучитель по Delphi 7 для профессионалов

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

Компонент запроса предназначен для создания запроса 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;

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.