Форум: "Базы";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизОжидание подключения к удаленой БД Найти похожие ветки
← →
slaga © (2005-04-29 18:24) [0]Добрый день, у меня такой вопрос:
Я использую компоненты доступа к Firebird с закладки Interbase.
Проблема в том что когда я подключаюсь к неработающему компу (на котором расположена база), то проходит довольно много времени пока я получу сообщение о невозможности подключения к такомуто хосту.
Вопрос: можно ли задать время, которое нужно ожидать подключения к удаленому серверу, перед тем как отругатся о ошибке подключения.
← →
Fay © (2005-04-29 18:34) [1]Можно преварительно постучаться в сокет.
← →
slaga © (2005-04-29 18:37) [2]Это как ?
← →
КиТаЯц © (2005-05-03 11:01) [3]Ну, право, не знаю, но мне перво-наперво такое в голову приходит:
procedure TForm1.Timer1Timer(Sender: TObject); // по таймеру
begin
If not IBDatabase1.Connected then
... и т.д.
end;
Жизнеспособен код или нет даже не представляю...
← →
Sergey_Masloff (2005-05-03 11:27) [4]КиТаЯц © (03.05.05 11:01) [3]
>Жизнеспособен код или нет даже не представляю...
Тогда смысл его писать? Просто "шоб було"?
← →
КиТаЯц © (2005-05-03 11:32) [5]> Sergey_Masloff (03.05.05 11:27) [4]
По логике должно работать, а вот будет или нет - проверять в лом. (Сеть + "...неработающему компу (на котором расположена база)"). Потому и пишу, что не уверен...
← →
sniknik © (2005-05-03 12:00) [6]> По логике должно работать,
нет, не будет, по логике.
события от таймера (в отличие от ожидания) выполняются в основном потоке, т.е. твой "и т.д." в котором подразумевается конект к базе (так понимаю?) будет вешать его (основной поток) также как если бы таймера не было, и ни функцию задания таймаута ни ускорение определения "выключенности" компа/сервера FB таймер не решает (он вообще ни при делах).
усложнение не всегда решение... тут это просто лишняя деталь (пятая нога для собаки).
← →
atruhin © (2005-05-03 12:03) [7]КиТаЯц © (03.05.05 11:32) [5]
А логику этого действа сможешь объяснить?
По САБЖу много времени это сколько? От этого и плясать.
← →
КиТаЯц © (2005-05-03 12:23) [8]> sniknik © (03.05.05 12:00) [6]
> atruhin © (03.05.05 12:03) [7]
ОК. Значит "код не жизнеспособен".
← →
slaga © (2005-05-04 15:17) [9]Ну я думал может кто знает как выставить время ожидания у компонента (TIBDataBase или TIBTransaction) или еще где, и вообще, тут же проблема даже не в том как сократить время ожидания для конекта к базе, я так понимаю перед тем как попытаться прикон. к базе идет проверка на подключение к удаленному компу, так вот если этот комп выключен то время ожидания на ответ он него очень длинный, вот если б можно было сократить это время ожидания
← →
Mr.Scorp. (2005-05-04 15:28) [10]Я думую надо сделать через сокеты, где они будут постоянно ожидать ответ, на запрос.
← →
slaga © (2005-05-04 15:41) [11]ну смотрите, вот такая ситуация:
в программе реализовано подключение к удаленной базе и просмотр определенной информации, юзер нажимает на кнопку "подключиться" и !! если комп не работает !! то юзер долго и нудно ждет пока получит сообщение о том что невозможно подключиться к удаленому компу, как это обработать ?
← →
Polevi © (2005-05-04 16:28) [12]можно попробовать пинг
← →
slaga © (2005-05-04 16:33) [13]А есть пример как это вкрутить в программу ?
← →
P.N.P. © (2005-05-04 16:54) [14]>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;
← →
sniknik © (2005-05-04 16:59) [15]примеров валом, на то и инет ;)
вот например
http://inattack.ru/modules/myarticles/article.php?storyid=159
выцепляеш отсюда скан 1-го порта, на http://www.ibase.ru узнаеш на каком порту обычно "висит" Firebird и проверяеш только его. если ответ полжительный то + к тому что узнаеш что машина включена, получаеш дополнительный "бонус" - предположительно и сервер Firebird запушен. (необязательно, мало ли кто порт занял, но с шорошим шансом что это именно он)
вот. осталось только реализовать. ;о)) (не пробовал ничего подобного, возможно лажа)
или перейди на ADO у него есть и можно настраивать таймаут конекта (и асинхронное подключение) и т.д., останется только OLEDB провайдера для IB/Firebird-а скачать, и можно позоваться, не утомляя юзера бесплодными ожиданиями подключения. ;о))
← →
slaga © (2005-05-04 17:11) [16]Спасибо
← →
DSKalugin © (2005-05-04 17:14) [17]tcp 3050
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c