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