Интерфейсы 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.
