|
Управление соединением
Соединение с хранилищем данных 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 — открытие других
соединений с разрешениями запрещено.
|