M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

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

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