Главная страница
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.024 c
14-63802
Intras
2003-02-04 11:38
2003.02.20
PGP SDK


14-63746
Gerda
2003-02-05 18:16
2003.02.20
Авторское право.


3-63527
Виталий
2003-01-30 12:04
2003.02.20
DBGrid - Как програмно перелезть в другое поле (колонку)?


3-63542
4x4
2003-02-03 16:10
2003.02.20
DBGrid и RowHeight?


1-63624
BALU1111
2003-02-11 16:00
2003.02.20
msgdailog