![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ожидание подключения к удаленой БД [D6, Firebird]
slaga © (2005-04-29 18:24:00)Добрый день, у меня такой вопрос:
Я использую компоненты доступа к Firebird с закладки Interbase.
Проблема в том что когда я подключаюсь к неработающему компу (на котором расположена база), то проходит довольно много времени пока я получу сообщение о невозможности подключения к такомуто хосту.
Вопрос: можно ли задать время, которое нужно ожидать подключения к удаленому серверу, перед тем как отругатся о ошибке подключения.
DSKalugin (2005-05-04 17:14:00) [1]tcp 3050
slaga (2005-05-04 17:11:00) [2]Спасибо
sniknik (2005-05-04 16:59:00) [3]примеров валом, на то и инет ;)
вот например
http://inattack.ru/modules/myarticles/article.php?storyid=159
выцепляеш отсюда скан 1-го порта, на http://www.ibase.ruузнаеш на каком порту обычно "висит" Firebird и проверяеш только его. если ответ полжительный то + к тому что узнаеш что машина включена, получаеш дополнительный "бонус" - предположительно и сервер Firebird запушен. (необязательно, мало ли кто порт занял, но с шорошим шансом что это именно он)
вот. осталось только реализовать. ;о)) (не пробовал ничего подобного, возможно лажа)
или перейди на ADO у него есть и можно настраивать таймаут конекта (и асинхронное подключение) и т.д., останется только OLEDB провайдера для IB/Firebird-а скачать, и можно позоваться, не утомляя юзера бесплодными ожиданиями подключения. ;о))
P.N.P. (2005-05-04 16:54:00) [4]>slaga © (04.05.05 16:33) [13]
Можно с использованием компонента TIdIcmpClient (вкладка Indy)
procedure TForm1.Button1Click(Sender: TObject);
begin
//Пингуем
IdIcmpClient1.Ping();
end;
procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
//Если в ответ получили >0 байт, то все ОК
if AReplyStatus.BytesReceived>0 then
ShowMessage('Ok/'+IntToStr(AReplyStatus.BytesReceived)) else
ShowMessage('Filed!');
end;
slaga (2005-05-04 16:33:00) [5]А есть пример как это вкрутить в программу ?
Polevi (2005-05-04 16:28:00) [6]можно попробовать пинг
slaga (2005-05-04 15:41:00) [7]ну смотрите, вот такая ситуация:
в программе реализовано подключение к удаленной базе и просмотр определенной информации, юзер нажимает на кнопку "подключиться" и !! если комп не работает !! то юзер долго и нудно ждет пока получит сообщение о том что невозможно подключиться к удаленому компу, как это обработать ?
Mr.Scorp. (2005-05-04 15:28:00) [8]Я думую надо сделать через сокеты, где они будут постоянно ожидать ответ, на запрос.
slaga (2005-05-04 15:17:00) [9]Ну я думал может кто знает как выставить время ожидания у компонента (TIBDataBase или TIBTransaction) или еще где, и вообще, тут же проблема даже не в том как сократить время ожидания для конекта к базе, я так понимаю перед тем как попытаться прикон. к базе идет проверка на подключение к удаленному компу, так вот если этот комп выключен то время ожидания на ответ он него очень длинный, вот если б можно было сократить это время ожидания
КиТаЯц (2005-05-03 12:23:00) [10]> sniknik © (03.05.05 12:00) [6]
> atruhin © (03.05.05 12:03) [7]
ОК. Значит "код не жизнеспособен".
atruhin (2005-05-03 12:03:00) [11]КиТаЯц © (03.05.05 11:32) [5]
А логику этого действа сможешь объяснить?
По САБЖу много времени это сколько? От этого и плясать.
sniknik (2005-05-03 12:00:00) [12]> По логике должно работать,
нет, не будет, по логике.
события от таймера (в отличие от ожидания) выполняются в основном потоке, т.е. твой "и т.д." в котором подразумевается конект к базе (так понимаю?) будет вешать его (основной поток) также как если бы таймера не было, и ни функцию задания таймаута ни ускорение определения "выключенности" компа/сервера FB таймер не решает (он вообще ни при делах).
усложнение не всегда решение... тут это просто лишняя деталь (пятая нога для собаки).
КиТаЯц (2005-05-03 11:32:00) [13]> Sergey_Masloff (03.05.05 11:27) [4]
По логике должно работать, а вот будет или нет - проверять в лом. (Сеть + "...неработающему компу (на котором расположена база)"). Потому и пишу, что не уверен...
Sergey_Masloff (2005-05-03 11:27:00) [14]КиТаЯц © (03.05.05 11:01) [3]
>Жизнеспособен код или нет даже не представляю...
Тогда смысл его писать? Просто "шоб було"?
КиТаЯц (2005-05-03 11:01:00) [15]Ну, право, не знаю, но мне перво-наперво такое в голову приходит:
procedure TForm1.Timer1Timer(Sender: TObject); // по таймеру
begin
If not IBDatabase1.Connected then
... и т.д.
end;
Жизнеспособен код или нет даже не представляю...
slaga (2005-04-29 18:37:00) [16]Это как ?
Fay (2005-04-29 18:34:00) [17]Можно преварительно постучаться в сокет.