Компонент TADOQuery обеспечивает Delphi разработчики возможность извлекать данные из одной или нескольких таблиц из База данных ADO используя SQL.
Эти операторы SQL могут быть операторами DDL (язык определения данных), такими как CREATE TABLE, ALTER INDEX и т. Д., Или они могут быть операторами DML (Data Manipulation Language), такими как SELECT, UPDATE и УДАЛЯТЬ. Однако наиболее распространенным оператором является оператор SELECT, который создает представление, аналогичное представлению, доступному с использованием компонента Table.
Примечание: хотя выполнение команд с использованием компонента ADOQuery возможно, ADOCommandКомпонент больше подходит для этой цели. Это чаще всего используется для выполнения команд DDL или для выполнения хранимой процедуры (даже если вы должны использоватьTADOStoredProc для таких задач), который не возвращает набор результатов.
SQL, используемый в компоненте ADOQuery, должен быть приемлемым для используемого драйвера ADO. Другими словами, вы должны быть знакомы с различиями в написании SQL, например, между MS Access и MS SQL.
Как и при работе с компонентом ADOTable, доступ к данным в базе данных осуществляется с помощью соединения с хранилищем данных, установленного компонентом ADOQuery, с использованием егоConnectionString свойство или через отдельный компонент ADOConnection, указанный в соединениеимущество.
Чтобы сделать форму Delphi способной извлекать данные из базы данных Access с помощью компонента ADOQuery, просто отбросьте все связанных с ним компонентов доступа к данным и данных, и создайте ссылку, как описано в предыдущих главах этого документа. курс. Компоненты доступа к данным: DataSource, ADOConnection вместе с ADOQuery (вместо ADOTable) и один компонент с поддержкой данных, такой как DBGrid, - это все, что нам нужно.
Как уже объяснялось, с помощью инспектора объектов установите связь между этими компонентами следующим образом:
DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// строим ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = False
Выполнение SQL-запроса
Компонент TADOQuery не имеет TableNameсвойство, как делает TADOTable. TADOQuery имеет свойство (TStrings), которое называется SQL который используется для хранения оператора SQL. Вы можете установить значение свойства SQL с помощью Инспектора объектов во время разработки или с помощью кода во время выполнения.
Во время разработки вызовите редактор свойств для свойства SQL, нажав кнопку с многоточием в Инспекторе объектов. Введите следующую инструкцию SQL: «SELECT * FROM Authors».
Оператор SQL может быть выполнен одним из двух способов, в зависимости от типа оператора. Операторы языка определения данных обычно выполняются с ExecSQL метод. Например, чтобы удалить конкретную запись из определенной таблицы, вы можете написать инструкцию DELETE DDL и выполнить запрос с помощью метода ExecSQL.
(Обычные) операторы SQL выполняются путем установки TADOQuery. активный собственность на Правда или позвонивоткрыто метод (по сути тот же). Этот подход аналогичен извлечению данных таблицы с помощью компонента TADOTable.
Во время выполнения оператор SQL в свойстве SQL может использоваться как любой объект StringList:
с ADOQuery1 начинайте Закрыть;
SQL.Clear;
SQL.Add: = 'SELECT * FROM Authors' SQL.Add: = 'ORDER BY authorname DESC' Open;
конец;
Приведенный выше код во время выполнения закрывает набор данных, очищает строку SQL в свойстве SQL, назначает новую команду SQL и активирует набор данных, вызывая метод Open.
Обратите внимание, что создание постоянного списка объектов полей для компонента ADOQuery, очевидно, не имеет смысла. При следующем вызове метода Open SQL может быть настолько разным, что весь набор имен (и типов) полей может измениться. Конечно, это не тот случай, если мы используем ADOQuery для извлечения строк только из одной таблицы с постоянным набором полей - и результирующий набор зависит от части WHERE оператора SQL.
Динамические Запросы
Одним из замечательных свойств компонентов TADOQuery является Params имущество. Параметризованный запрос - это тот, который допускает гибкий выбор строк / столбцов с использованием параметра в предложении WHERE оператора SQL. Свойство Params позволяет заменять параметры в предопределенном операторе SQL. Параметр является заполнителем для значения в предложении WHERE, определенном непосредственно перед открытием запроса. Чтобы указать параметр в запросе, используйте двоеточие (:) перед именем параметра.
Во время разработки используйте Инспектор объектов, чтобы установить свойство SQL следующим образом:
ADOQuery 1.SQL: = 'ВЫБРАТЬ * ИЗ ПРИЛОЖЕНИЙ ГДЕ type =: apptype'
Когда вы закроете окно редактора SQL, откройте окно «Параметры», нажав кнопку с многоточием в Инспекторе объектов.
Параметр в предыдущем операторе SQL называетсяAppType. Мы можем установить значения параметров в коллекции Params во время разработки через диалоговое окно Parameters, но большую часть времени мы будем изменять параметры во время выполнения. Диалоговое окно «Параметры» можно использовать для указания типов данных и значений параметров по умолчанию, используемых в запросе.
Во время выполнения параметры могут быть изменены, а запрос повторно выполнен для обновления данных. Чтобы выполнить параметризованный запрос, необходимо предоставить значение для каждого параметра до выполнения запроса. Чтобы изменить значение параметра, мы используем либо свойство Params, либо метод ParamByName. Например, учитывая оператор SQL, как указано выше, во время выполнения мы могли бы использовать следующий код:
с ADOQuery1 начинай
Близко;
SQL.Clear;
SQL.Add ('SELECT * FROM Applications WHERE type =: apptype');
. ParamByName ( 'AppType') Значение: = 'мультимедиа';
Открыто;
конец;
Как и при работе с компонентом ADOTable, ADOQuery возвращает набор или записи из таблицы (или двух или более). Навигация по набору данных осуществляется с помощью того же набора методов, который описан в главе «За данными в наборах данных».
Навигация и редактирование запроса
В общем случае компонент ADOQuery не следует использовать во время редактирования. Запросы на основе SQL в основном используются для отчетности. Если ваш запрос возвращает набор результатов, иногда можно редактировать возвращенный набор данных. Результирующий набор должен содержать записи из одной таблицы и не должен использовать какие-либо агрегатные функции SQL. Редактирование набора данных, возвращаемого ADOQuery, аналогично редактированию набора данных ADOTAble.
пример
Чтобы увидеть некоторые действия ADOQuery, мы приведем небольшой пример. Давайте сделаем запрос, который можно использовать для извлечения строк из различных таблиц в базе данных. Чтобы показать список всех таблиц в базе данных, мы можем использовать GetTableNamesметод ADOConnection составная часть. GetTableNames в событии OnCreate формы заполняет ComboBox именами таблиц, а кнопка Button используется для закрытия запроса и его повторного создания для извлечения записей из выбранной таблицы. Обработчики событий () должны выглядеть так:
процедура TForm1.FormCreate (Отправитель: TObject);
начать
ADOConnection1.GetTableNames (ComboBox1.Items);
конец;
процедура TForm1.Button1Click (Отправитель: TObject);
var tblname: string;
начать
если ComboBox1.ItemIndex, то Exit;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
с ADOQuery1 начинай
Близко;
SQL.Text: = 'SELECT * FROM' + tblname;
Открыто;
конец;
конец;
Обратите внимание, что все это можно сделать с помощью ADOTable и его свойства TableName.