Консультация № 66089
08.12.2006, 12:22
0.00 руб.
0 2 1
Здравствуйте, уважаемые Эксперты!

Долго искал ответ на свой вопрос, но что-то неправильно его "вписываю" в поисковики - не смог найти ответа, может Вы знаете?

Вопрос: Есть база MSSQL (версию точно не знаю кажется 2000) использую TADOConnection (Delphi5). В случае если сети нет приложение "подвисает" на 15 секунд пытаясь соединитьсяне смотря на выставленные таймауты по 1с. Есть мысль, чтобы этого "зависания" избежать как то сначала проверить - а работает ли компьютер с базой? А еще лучше - работает ли там база?

P.S.
Мои размышления - можно сделать через пинг (подключить WinSock, проект чуть раздуется результат будет через 2 сек). Но работает ли база??? И файрволом может быть закрыт пинг :(. Но ведь MSSQL почти наверняка "сидит" на каком то порту и должен отвечать приложениям что он работает?

Обсуждение

давно
Мастер-Эксперт
425
4118
08.12.2006, 19:55
общий
это ответ
Здравствуйте, LanK!
Попробуйте такую функцию проверки соединения. В свое время я ее раскопал на сайте http://delphiworld.narod.ru/
uses
ComObj;

function OpenConnection(ConnectionString: String): Boolean;
var
ADODBConnection: OleVariant;
begin
ADODBConnection := CreateOleObject(‘ADODB.Connection‘);
ADODBConnection.CursorLocation := 3;
ADODBConnection.ConnectionString := ConnectionString;
ADODBConnection.ConnectionTimeout := 3; {Три секунды на соединение}
Result := True;
try
ADODBConnection.Open;
except
Result := False;
end;
If Result Then
ADODBConnection.Close;
end;
Здесь:
- ConnectionString - это сформированная Вами строка подключения к БД.
Если функция возвращает True - подключение прошло успешно, если False, то подключится не удалось.
Хочу заметить, что если в процессе работы Вам не нужна визуализация данных, например нужно передать в БД команду на модификацию данных в какой-то таблице, то такой способ подключения к БД работает быстрее, чем использование VCL.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
11.12.2006, 13:55
общий
sir henry: Увы, 3с превращается в 15-20 секунд, в случае если сеть отключена. Простой пример - создаем "голый" проект, помещаем в него Вашу функцию - отключаем сеть .... 15с - :(. Проверить это можно даже без сервера MSSQLсами драйвера ADO так тормозят, поэтому необходим какой то алгоритм узнать - работает или нет НЕ через ADO. Либо пользовать какой другой драйвер, но какой? Чтобы у <b>любого</b> пользователя он был? ADO есть у всех...
Форма ответа