Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.49 MB
Время: 0.037 c
1-1116939853
Андрюха7
2005-05-24 17:04
2005.06.14
Доступ на Delphi к значению функции - массиву записей


6-1111175049
Ig
2005-03-18 22:44
2005.06.14
Indy UDP и динамическое создание компонентов


1-1117112456
SLP
2005-05-26 17:00
2005.06.14
Excel PivotTables.AddFields


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


1-1117282425
PIF
2005-05-28 16:13
2005.06.14
Компиляция res файла при старте приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский