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


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



Содержание раздела