Форум: "Базы";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизНекорректное отключение от базы Найти похожие ветки
← →
Lavrenty © (2007-08-16 13:54) [0]Здравствуйте все! Пытаюсь закрыть клиента без выдачи аварийного сообщения об отсутствии сети, если такое вдруг происходит(отключение от сети во время работы программы).
if IBDB_DFP.Connected then
IBDB_DFP.Connected := false;
получаю сообщение:
"Unable to complete request network to host "...".
Error writing data to the connection.
Удалённый хост принудительно разорвал существующее подключение."
Программа при этом закрывается только через диспетчер задач.
Если так
if IsNetworkAlive(dwFlags) then
IBDB_DFP.Connected := false;
то программа закрывается, но после сообщения
"Exception EIBInterBaseError in module InfprmationAllocation.exe at 0012CF64.
Unable to complete request network to host "...".
Error writing data to the connection.
Удалённый хост принудительно разорвал существующее подключение."
Пытаюсь обработать исключение
try
IBDB_DFP.Connected := false;
except
on EIBInterBaseError do
halt;
end;
то как и во втором варианте. Как закрыть прогамму без выдачи аварийного сообщения?
← →
DrPass © (2007-08-16 15:18) [1]Насколько я знаю, корректной обработки обрыва связи в компонентах IBX до сих пор так и нет. Возьми FIBPlus
← →
Lavrenty © (2007-08-16 15:31) [2]
> DrPass © (16.08.07 15:18) [1]
К сожалению это невозможно
← →
Anatoly Podgoretsky © (2007-08-16 16:00) [3]> Lavrenty (16.08.2007 15:31:02) [2]
Зависит от того, что считать за корректность.
← →
Ega23 © (2007-08-16 16:31) [4]
> К сожалению это невозможно
Почему?
← →
PEAKTOP © (2007-08-16 19:12) [5]
//==============================================================================
procedure TApllicationMainForm.ApplicationOnException(Sender :TObject; E: Exception);
var
ProcessHandle :THandle;
begin
if(E is EIBError)then
begin
if(((E as EIBError).IBErrorCode=isc_network_error)or((E as EIBError).IBErrorCode=isc_lost_db_connection))then
begin
Dialogs.MessageDlg("Lost connection to database !", mtError, [mbOk],0);
ProcessHandle := Windows.OpenProcess(PROCESS_TERMINATE, FALSE, Windows.GetCurrentProcessId);
Windows.TerminateProcess(ProcessHandle, 4);
end;
end;
end;
procedure TApllicationMainForm.FormCreate(Sender :TObject);
begin
Application.OnException := Self.ApplicationOnException;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.05 c