Delphi для профессионалов



 

Управление соединением


Соединение с хранилищем данных ADO открывается и закрывается при помощи свойства

property Connected: Boolean;

или методов

procedure Open; overload;

procedure Openfconst UserlD: WideString; const Password: WideString); overload;

и

procedure Close;

Метод open является перегружаемым при необходимости использования удаленного или локального соединения. Для удаленного соединения применяется вариант с параметрами UserID и Password.

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

property BeforeConnect: TNotifyEvent;

property BeforeDisconnect: TNotifyEvent; 

property AfterConnect: TNotifyEvent; 

property AfterDisconnect: TNotifyEvent;

Кроме этого, компонент TADOConnection имеет дополнительные методы-обработчики. После получения подтверждения от провайдера о том, что соединение будет открыто, перед его реальным открытием вызывается метод

TWillConnectEvent = procedure(Connection: TADOConnection; var Connectionstring, UserlD, Password: WideString; var ConnectOptions: TConnectOption; 

var EventStatus: TEventStatus) of object;

 property OnWillConnect: TWillConnectEvent;

Параметр Connection содержит указатель на вызвавший обработчик компонент.

Параметры Connectionstring, userID и Password определяют строку параметров, имя и пароль пользователя.

Соединение может быть синхронным или асинхронным, что и определяется параметром ConnectOptions типа TConnectOption:

type TConnectOption = (coConnectUnspecified, coAsyncConnect);

coConnectunspecified — синхронное соединение всегда ожидает результат последнего запроса;

coAsyncConnect — асинхронное соединение может выполнять новые запросы, не дожидаясь ответа от предыдущих запросов.

Наконец, параметр Eventstatus позволяет определить успешность выполнения посланного запроса на соединение:

type

TEventStatus = (esOK, esErrorsOccured, esCantDeny, esCancel, esUnwantedEvent);

esOK — запрос на соединение выполнен успешно;

esErrorsOccured — в процессе выполнения запроса возникла ошибка;

esCantDeny — соединение не может быть прервано;

esCancel — соединение было прервано до открытия;

esUnwantedEvent внутренний флаг ADO.

Например, в случае успешного соединения можно выбрать синхронный режим работы компонента:

procedure TForml.ADOConnectionWillConnect(Connection: TADOConnection;

 var ConnectionString, UserlD, Password: WideString;

 var ConnectOptions: TConnectOption;

 var Eventstatus: TEventStatus); 

begin if Eventstatus = esOK

then ConnectOptions := coConnectunspecified; 

end;

Кстати, параметр синхронности/асинхронности можно также задать при помощи свойства

ConnectOptions property ConnectOptions: TConnectOption;

После открытия соединения для выполнения собственного кода можно использовать метод-обработчик

TConnectErrorEvent = procedure(Connection:

  TADOConnection; Error: Error;

 var Eventstatus: TEventStatus) of object; 

property OnConnectComplete: TConnectErrorEvent;

Здесь, если в процессе открытия соединения возникла ошибка, параметр Eventstatus будет равен esErrorsOccured, а параметр Error содержит объект ошибки ADO.

Теперь перейдем к вспомогательным свойствам и методам компонента TADOConnection, обеспечивающим соединение.

Для ограничения времени открытия соединения для медленных каналов связи используется свойство

property ConnectionTimeout: Integer;

задающее время ожидания открытия соединения в секундах. По умолчанию оно равно 15 сек.

Также можно определить реакцию компонента на неиспользуемое соединение. Если через соединение не подключен ни один активный компонент, свойство

property KeepConnection: Boolean;

в значении True сохраняет соединение открытым. Иначе, после закрытия последнего связанного компонента ADO, соединение закрывается.

При необходимости провайдер соединения ADO определяется напрямую свойством

property Provider: WideString;

Имя источника данных по умолчанию задается свойством

property DefaultDatabase: WideString;

Но если этот же параметр указан в строке соединения, то он перекрывает собой значение свойства.

При необходимости прямой доступ к объекту соединения OLE DB обеспечивает свойство

property ConnectionObject: _Connection;

При открытии соединения необходимо вводить имя пользователя и его пароль. Появление стандартного диалога управляется свойством

property LoginPrompt: Boolean;

Без этого диалога для задания данных параметров можно использовать свойство Connectionstring, метод open (см. выше) или метод-обработчик

type TLoginEvent = procedure(Sender:TObject; 

Username, Password: string)

of object;

property OnLogin: TLoginEvent;

Свойство

type TConnectMode = (cmUnknown, cmRead, cmWrite, cinReadWrite, cmShareDenyRead, cmShareDenyWrite, cmShareExclusive, cmShareDenyNone);

 property Mode: TConnectMode;

задает доступные для соединения операции:

  • cmUnknown — разрешение неизвестно или не может быть установлено;
  • cmRead — разрешение на чтение;
  • cmwrite — разрешение на запись;
  • cmReadWrite — разрешение на чтение и запись;
  • cmshareDenyRead — разрешение на чтение для других соединений запрещено;
  • cmshareoenywrite — разрешение на запись для других соединений запрещено;
  • cmShareExciusive — разрешение на открытие для других соединений запрещено;
  • cmshareDenyNone — открытие других соединений с разрешениями запрещено.