Компонент TSQLDataDriverEh.

TSQLDataDriverEh это универсальный драйвер обработки данных, взаимодействующих с сервером посредствам языка SQL. TSQLDataDriverEh содержит пять объектов типа TSQLCommandEh: SelectCommand, DeleteCommand, InsertCommand, UpdateCommand, GetrecCommand которые хранят SQL выражения и параметры соответственно для запроса данных, удаления записи, вставки записи, изменения записи, перезапроса записи. Для выполнения команд TSQLDataDriverEh вызывает глобальное событие DefaultSQLDataDriverResolver.OnExecuteCommand. Вы должны написать это событие, чтобы выполнить SQL выражения на сервере и по необходимости вернуть DataSet для считывания данных. В режиме поставщика TSQLDataDriverEh берет данные из DataSet'а созданного в событии DefaultSQLDataDriverResolver.OnExecuteCommand записывает их в TMemTableEh. По мере требования он берет данные текущей записи, записывает их в TMemTableEh и переходит к следующей записи. В режиме обработчика изменений он принимает измененную запись от TMemTableEh, и вызывает событие DefaultSQLDataDriverResolver.OnExecuteCommand передавая в качестве параметра DeleteCommand, InsertCommand или UpdateCommand.

TSQLDataDriverEh имеет свойство SpecParams типа TStrings. Вы можете использовать его для записи специальных значений, которые будете использовать в событии DefaultSQLDataDriverResolver.OnExecuteCommand. Это свойство также используется объектом TServerSpecOperationsEh когда экземпляр этого объекта присвоен свойству DefaultSQLDataDriverResolver.ServerSpecOperations. Список специальных значений зависит от типа объекта TServerSpecOperationsEh и заполняется аналогично описанию в разделе “Свойство TXXXDataDriverEh.SpecParams”

Свойство DefaultSQLDataDriverResolver.ServerSpecOperations имеет тип TServerSpecOperationsEh. Этот объект предназначен для обработки специальных операций до или после выполнения процедуры ExecuteCommand. TServerSpecOperationsEh является базовым классом для классов TOracleSpecOperationsEh, TMSSQLSpecOperationsEh, TInterbaseSpecOperationsEh, TInfromixSpecOperationsEh, TDB2SpecOperationsEh, TSybaseSpecOperationsEh и TMSAccessSpecOperationsEh. Каждый из этих объектов умеет обрабатывать свойство SpecParams в частности для получения автоинкрементных полей сгенерированных сервером. По названию класса можно определить тип сервера, для которого предназначен класс.

Для полнофункциональной работы TSQLDataDriverEh необходимо написать событие DefaultSQLDataDriverResolver.OnExecuteCommand чтобы выполнять запросы на сервер и присвоить свойство DefaultSQLDataDriverResolver.ServerSpecOperations объектом одного из наследников класса TServerSpecOperationsEh. Присваивать свойство ServerSpecOperations имеет смысл, если вы будете выполнять операции вставки в таблицы на сервере содержащие автоинкрементые поля.

 

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

// Нижеприведенный код настраивает работу компонент TSQLDataDriverEh во всем приложении,

// для работы с сервером InderBase через движок BDE.

uses … DataDriverEh, BDEDataDriverEh;

type

TMainForm = class(TMainForm)

Database1: TDatabase;

SQLDataDriverEh: TSQLDataDriverEh;

procedure TMainForm.FormCreate(Sender: TObject);

begin

DefaultSQLDataDriverResolver.OnExecuteCommand := OnExecuteSQLCommand;

DefaultSQLDataDriverResolver.ServerSpecOperations := TInterbaseSpecOperationsEh.Create;

end;

 

procedure TMainForm.FormDestroy(Sender: TObject);

begin

DefaultSQLDataDriverResolver.ServerSpecOperations.Free;

DefaultSQLDataDriverResolver.ServerSpecOperations := Nil;

end;

 

function TMainForm.OnExecuteSQLCommand(SQLDataDriver: TCustomSQLDataDriverEh;

Command: TCustomSQLCommandEh; var Cursor: TDataSet; var FreeOnEof,

Processed: Boolean): Integer;

begin

Result := DefaultExecuteBDECommandEh(SQLDataDriver, Command,

Cursor, FreeOnEof, Processed, Database1.DatabaseName);

end;

 

 

TSQLDataDriverEh является базовым классом для TBDEDataDriverEh, TIBXDataDriverEh, TDBXDataDriverEh и TADODataDriverEh. Эти объекты переопределяют процедуру ExecuteCommand и умеют сами выполнять SQL выражения на сервере и по необходимости возвращать DataSet для считывания данных. При вызове SQL команд, в этих компонентах создается DataSet, соответствующий типу доступа к данным. Для TBDEDataDriverEh это TQuery, для TIBXDataDriverEh это TIBXQuery и т. п. Кроме того, классы TBDEDataDriverEh, TIBXDataDriverEh, TDBXDataDriverEh автоматически определяют объект TServerSpecOperationsEh. Для TADODataDriverEh необходимо определять свойство DefaultSQLDataDriverResolver.ServerSpecOperations т.к. технология ADO не позволяет однозначно определить тип сервера.

 

TSQLDataDriverEh содержит следующие события:

OnExecuteCommand - пишите обработчик этого события, чтобы выполнить SQL выражение. В событии можно вызвать процедуру TCustomSQLDataDriverEh.DefaultExecuteCommand чтобы выполнить SQL выражение по умолчанию. TCustomSQLDataDriverEh.DefaultExecuteCommand вызывает процедуру DefaultSQLDataDriverResolver.ExecuteCommand, который, в свою очередь, вызывает событие DefaultSQLDataDriverResolver.OnExecuteCommand.

 

OnGetBackUpdatedValues - пишите обработчик этого события, чтобы получить с сервера обновленные значения записи. В событии можно вызвать процедуру TCustomSQLDataDriverEh.DefaultGetUpdatedServerValues чтобы выполнить действия по получению. TCustomSQLDataDriverEh.DefaultGetUpdatedServerValues выполняет процедуру DefaultSQLDataDriverResolver.GetBackUpdatedValues. Если она не была обработана в DefaultSQLDataDriverResolver, то вызывает InternalGetServerSpecOperations.GetBackUpdatedValues. InternalGetServerSpecOperations возвращает объект типа TServerSpecOperationsEh.