Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Ожидание подключения к удаленой БД   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
14-1117189084
sofs
2005-05-27 14:18
2005.06.14
3ds max


4-1114175557
ANB
2005-04-22 17:12
2005.06.14
Как включить/выключить конкретный элемент TCheckListBox


6-1111951833
Змей
2005-03-27 23:30
2005.06.14
webbrowser


14-1116877897
Yegorchic
2005-05-23 23:51
2005.06.14
Описание программных средств, для написания сайтов


1-1117381279
Serg1981
2005-05-29 19:41
2005.06.14
Отдельный hint для каждого элемента ListView