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

Вниз

Как проверить наличие коннекции   Найти похожие ветки 

 
jocko   (2003-01-31 11:24) [0]

Как проверить наличие коннекции, если она была установлена, а затем разорвана сервером (выгружен процесс на сервере, напр. из-за перегруженности или из-за плохой связи). перед отправкой очередного запроса, так чтобы иметь возможность выдать сообщение с предложением переконнектиться.
MS SQL, ADO?


 
Darkwin ©   (2003-01-31 13:41) [1]

Напиши такой код:
procedure TForm1.ADOConnection1ExecuteComplete(Connection: TADOConnection;
RecordsAffected: Integer; const Error: Error;
var EventStatus: TEventStatus; const Command: _Command;
const Recordset: _Recordset);

var
mes_ES,mes_RA,mes_err:String;
begin
if Error<>nil then
mes_err:=
"Error.Number="+IntToStr(Error.Number)+#10#13+
"Error.NativeError="+IntToStr(Error.NativeError)+#10#13+
"Error.Source="+Error.Source+#10#13+
"Error.Description="+Error.Description;

mes_RA:= "RecordsAffect="+IntToStr(RecordsAffected);
mes_ES:="EventStatus: " + GetEnumName(TypeInfo(TEventStatus), Ord(EventStatus));

MessageBox(Handle,PChar(mes_RA+#10#13#10#13+mes_err+#10#13#10#13+mes_ES),PChar("ADOConnection1ExecuteComplete"),MB_OK);
end;

запусти приложение, разорви связь с сервером потом восстанови, попытайся послать какой-нибудь запрос, и всё станет ясно...


 
jocko   (2003-01-31 14:54) [2]

Хотел бы конкретизировать,
в этом обработчике уменя и так сидит нечто похожее, собственно только так я и показываю сообщение об ошибках сервера, все вызовы процедур сидят в try except.
Как определить именно обрыв связи?!!!
onWillExecute тоже не подходит (EventStatus всегда такой радостный esOk ,...), хотя в документации "Occurs after a database server signals acceptance of a command execution"


 
Darkwin ©   (2003-01-31 15:48) [3]

наверно так: (всё в том же событии)
if EventStatus=esErrorsOccured then
begin
// вроде номер дисконнекта = -2147467259, а может и нет, проверь
if Error.Number=-2147467259 then
ShowMessage("Disconnect");
EventStatus:= esOK; // чтобы не выскочила ошибка
end;


 
jocko   (2003-01-31 17:10) [4]

Спасибо, как до самого не дошло...


 
BlackTiger   (2003-01-31 19:06) [5]

А если пойти дальше и круче?

Как сделать некий "connection sensor"?

Чтобы сидел на таймере и сообщал об обрыве связи сразу, при этом не мешая работать (на своей thread).


 
jocko   (2003-02-03 09:19) [6]

Наверно не стоит, "connection sensor" вопервых будет забивать трафик не нужными вызовами, вовторых загружать сервер, теми же ненужными вызовами, а проблема именно с полохой связью и перегруженностью сервера (выгрузку спящих процессов на малозагруженном сервере никто делать не будет), в третьих запросы придется посылать через тот же Сonnection так что мешаться он всеравно будет...

Я сначала хотел сделать именно так, потом передумал.




Страницы: 1 вся ветка

Текущий архив: 2003.02.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
3-63519
asd
2003-02-02 23:08
2003.02.20
как через дельфи в 1с в справочник добавить элемент


14-63766
BOA_KAA
2003-02-03 15:17
2003.02.20
E-mail


6-63720
really_Deflorator
2002-12-28 23:13
2003.02.20
Поиск сервера в сети


3-63531
Andrey V.
2003-01-31 15:20
2003.02.20
Проблема с базой Interbase


14-63840
Случайный прохожий
2003-02-03 21:45
2003.02.20
Когда-нибудь видели такое чудовище?