Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Что делать если не нашли сервер


Автор: HalkaR 8.3.2006, 23:29
Есть ADOConnection, полностью настроенный, Connected=true. Что делать если сервера нет (упал, отключен от сети, вобщем не нашелся)? Как организовать подключение? Просто если я ставлю connected=false - то все равно подключение есть, как отключить автоматическое подключение?
Спасибо!

Автор: Foley 9.3.2006, 01:26
Код

uses OLEAuto
//Globals: adocn     - connection which all other ADO objects use
               //adors     - Recordset
               //adocmd    - Command Object
               //adocmdprm - Command Object set aside for Parametric querying
               //ConnectionString
                //         - Connection String used for connecting

               //ErrMsg    - Last Error Message
               //ADOActive - Indicator as to whether ADO has been started yet

...
function ADOStop: Boolean;
begin
  try
    if not (varisempty(adocn)) then
    begin
      adocn.close;
      adocn := unassigned;
    end;
    adors := unassigned;
    adocmd := unassigned;
    adocmdprm := unassigned;
    result := true;
  except
    on E: Exception do
    begin
      ErrMsg := e.message;
      Result := false;
    end;
  end;
  ADOActive := false;
end;

не сам писал кшно, но может поможет...

Автор: SergeBS 9.3.2006, 09:09
HalkaR,
Код

with ADOconnection do
   for i := 0 to (DataSetCount-1) do
       if Datasets[i].Active then  //не обязательно, но хуже не будет
        Datasets[i].Close;


Автор: Демо 9.3.2006, 09:53
Цитата(HalkaR @ 8.3.2006, 23:29 Найти цитируемый пост)
Просто если я ставлю connected=false - то все равно подключение есть,


Это как?
Ты закрыл соединение, откуда подключение есть? Как это выглядит. У меня такая ситуация не встречалась.

Автор: HalkaR 9.3.2006, 10:18
Цитата(Демо @ 9.3.2006, 09:53)
Цитата(HalkaR @  8.3.2006,  23:29 Найти цитируемый пост)
Просто если я ставлю connected=false - то все равно подключение есть,


Это как?
Ты закрыл соединение, откуда подключение есть? Как это выглядит. У меня такая ситуация не встречалась.

Я имел в виду Object inspector.

Автор: SergeBS 9.3.2006, 18:02
Демо,
Если есть хоть один Dataset, который активен, connection автоматически включается. Т.е. нужно закрыть все dataset. Тогда не будет попытки соединения.

Автор: Демо 10.3.2006, 02:03
SergeBS,
Разве при закрытии ADOConnection остаются открытые DataSet?

Автор: Петрович 10.3.2006, 09:50
Цитата(Демо @ 9.3.2006, 10:53 Найти цитируемый пост)
Цитата(HalkaR @ 8.3.2006, 23:29 )
Просто если я ставлю connected=false - то все равно подключение есть,



Это как?
Ты закрыл соединение, откуда подключение есть? Как это выглядит. У меня такая ситуация не встречалась.


В ADO, по умолчанию, соединения кэшируются (для оптимизации). Поэтому, даже после установки connected=false, реальное соединение с сервереом сохраняет свое состояние.

Почитать об этом можно здесь: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmdac/html/pooling2.asp. Там же описано как с этим бороться, если конечно это очень необходимо. smile

Автор: Демо 10.3.2006, 10:45
Цитата(Петрович @ 10.3.2006, 09:50 Найти цитируемый пост)
Почитать об этом можно здесь: MSDN - Pooling in the Microsoft Data Access Components. Там же описано как с этим бороться, если конечно это очень необходимо.


Спасибо, новое - это всегда интересно, особенно когда оно близко к плоскости твоих интересов;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)