В технологии ADO есть компонент ADOCommand, являющийся реализацией объекта ADO Command в среде C++ Builder и выполняющий ряд команд, которые не возвращают результаты. К примеру, это могут быть SQL-операторы языка определения данных или хранимых процедур. Чтобы выполнить хранение процедуры и SQL-запросы, которые возвращают результаты в виде наборов данных, рекомендуется использовать компоненты доступа к данным:
- ADODataSet.
- ADOQuery.
- ADOStoredProc.
Свойство CommandObject
Предоставляет прямой доступ к базовому объекту команды ADO Command и имеет тип _Command.
Свойство CommandText
Указывает тип команды и определяет свойство CommandType (компонент ADODataSet). Значения cmdFile и cmdTableDirect для свойства CommandType объекта ADOCommand являются недопустимыми и их применить невозможно.
Значение свойства CommandText типа WideString определяет команду и выполняется методом Execute. В качестве команды можно задать строку с SQL-оператором, имя таблицы или имя хранимой процедуры. В случае необходимости можно задать некоторые параметры свойством Parametrs.
Свойство States
Определяет текущее состояние компонента ADOCommand (объекта Command) и имеет тип TObjectstates со следующей структурой:
enum TObjectState { stClosed, stOpen, stConnecting, stExecuting, stFetching };
typedef Set<TObjectState, stClosed, stFetching> TObjectStates;
Параметры States
- stClosed – объект Command выключен и закрыто соединение к хранилищу данных;
- stOpen – объект Command выключен, но соединен с хранилищем данных;
- stConnecting – объект Command подключен к хранилищу данных;
- stExecuting – объект Command выполняет команду;
- stFetching – объект Command получает данные от хранилища данных.
Свойство ExecuteOptions
Определяет условия выполнения команды ADO и имеет тип TExecuteOptions со следующей структурой:
enum TExecuteOption { eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking, eoExecuteNoRecords };
typedef Set<TExecuteOption, eoAsyncExecute, eoExecuteNoRecords> TExecuteOptions;
Параметры ExecuteOptions
- eoAsyncExecute – асинхронное выполнение команды;
- eoAsyncFetch – асинхронная передача данных;
- eoAsyncFetchNonBlocking – асинхронная передача данных без блокировки потока;
- eoExecuteNoRecords – выполнение команды ADO без возвращения данных.
Метод Execute
С помощью перегруженного метода Execute выполняются команды ADO, который имеет три версии с различными наборами параметров:
- _di__Recordset __fastcall Executed(); – объявление метода для выполнения команды без параметров;
- _di__Recordset __fastcall Execute(const OleVariant &Parameters); – объявление метода для выполнения команды с Parameters параметром;
- _di__Recordset __fastcall Execute(int &RecordsAffected, const OleVariant &Parameters); – объявление метода для выполнения команды с RecordsAffected, который возвращает общее число обработанных записей одним запросом.
Структура типа _di__Recordset
typedef System::DelphiInterface< _Recordset > _di__Recordset;
При выполнении команды ADO создается набор данных, где метод Execute возвращает этот набор данных. Для доступа к набору данных необходимо использовать компонент ADODataSet. Код получения доступа:
ADODataSet1->Recordset = ADOCommand1->Execute();
При вызове метода Execute возвращаемый набор данных назначается свойству Recordset названого компонента.