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

Интерфейсы dbExpress. Интерфейсы ISQLDriver и ISQLConnection.

Технология dbExpress основана на использовании четырех базовых интерфейсов, методы которых применяются во всех компонентах dbExpress. При серьезной работе с технологией или при проектировании собственных компонентов информация об этих интерфейсах будет полезна.

Интерфейс ISQLDriver

Интерфейс ISQLDriver инкапсулирует всего три метода для обслуживания драйвера dbExpress. Экземпляр интерфейса создается для соединения и обеспечивает его связь с драйвером.

Методы:

function SetOption(eDOption: TSQLDriverOption; PropValue: Longlnt):
SQLResult; stdcall;
function GetOption(eDOption: TSQLDriverOption; PropValue: Pointer;
MaxLength: Smalllnt; out Length: Smalllnt): SQLResult; stdcall;

…позволяют работать с параметрами драйвера. А метод:

function getSQLConnection(out pConn: ISQLConnection): SQLResult; stdcall;

…возвращает указатель на интерфейс связанного с драйвером соединения ISQLConnection.

Получить доступ к интерфейсу ISQLDriver разработчик может, использовав защищенное свойство:

property Driver: ISQLDriver read FSQLDriver;

…компонентаTSQLConnection.

Интерфейс ISQLConnection

Интерфейс ISQLConnection обеспечивает работу соединения. Он передает запросы серверу и возвращает результаты, создавая экземпляры интерфейса ISQLCommand; управляет транзакциями; поддерживает передачу метаданных при помощи интерфейса ISQLMetaData.

Для открытия соединения используется метод:

function connect(ServerName: PChar; UserName: PChar; Password: PChar): SQLResult; stdcall;

Где ServerName – имя базы данных, UserName и Password – имя и пароль пользователя.

Закрывает соединение метод:

function disconnect: SQLResult; stdcall;

Параметры соединения управляются методами:

function SetOption(eConnectOption: TSQLConnectionOption; lvalue: Longlnt): SQLResult; stdcall;
function GetOption(eDOption: TSQLConnectionOption;
PropValue: Pointer; MaxLength: Smalllnt; out Length: Smalllnt): SQLResult; stdcall;

Для обработки запроса, проходящего через соединение, создается интерфейс ISQLCommand:

function getSQLCommand(out pComm: ISQLCommand): SQLResult; stdcall;

Обработка транзакций осуществляется тремя методами:

function beginTransaction(TranID: LongWord): SQLResult;
stdcall; function commit(TranID: LongWord): SQLResult;
stdcall; function rollback(TranID: LongWord): SQLResult; stdcall;

При помощи метода:

function getErrorMessage(Error: PChar): SQLResult; overload; stdcall;

…организована обработка исключительных ситуаций в компоненте TSQLConnection. В нем реализована защищенная процедура SQLError, которую можно использовать в собственных компонентах и при необходимости дорабатывать.

Например, можно написать собственную процедуру контроля ошибок примерно по такому образцу:

procedure CheckError(IConn: ISQLConnection);
var FStatus: SQLResult;
FSize:SmallInt;
FMessage: pChar;
begin
FStatus: = IConn.getErrorMessageLen(FSize);
if (FStatus = SQL_SUCCESS)and(FSize > 0) then
begin
FMessage: = AllocMem(FSize + I);
FStatus: = IConn.getErrorMessage(FMessage);
if FStatus = SQL_SUCCESS
then MessageDlg (FMessage, mtError, [rnbOK], 0)
else
MessageDlg('Checking error', mtWarning, [mbOK], 0);
if Assigned(FMessage)
then FreeMem(FMessage);
end;
end;

Доступ к интерфейсу isQLConnection можно получить через свойство:

property SQLConnection: ISQLConnection;

…компонента TSQLConnection.

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