Форум: "Основная";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Вниз"Глобальный" перехват исключений Найти похожие ветки
← →
Rav (2005-10-19 20:55) [0]Доброго времени суток, уважаемые!
Суть проблемы такова: есть программа для работы с БД, при работе естественно могут возникать различные исключения, которые обрабатываются в разных местах и по разному. Все было прекрасно, пока к данной проге я не прикрутил журнал работы. Возникла проблема: как "перехватить" любое (или почти любое, меня болше интересуют БД) исключение, возникающее в процессе работы программы, но не обрабатывать его, а просто записать сообщение в журнал работы, а затем передать его дальше, "по месту назанчения"?
Может быть есть ссылки на статьи. где почитать по теме? ... я не нашел :(
Заранее спасибо за помощь?
← →
Sam Stone © (2005-10-19 21:54) [1]Application.OnException
← →
Rav (2005-10-19 22:09) [2]
> Application.OnException
Не подходит :( Уже пытался :(
Application.OnException обрабатывает исключения, не перехваченные "местными" обработчиками, а мне нужно перехватить ДО "местной" обработки, а затем вернуть туда же.
← →
Rav (2005-10-19 22:17) [3]Например: ошибку при удалении данных из таблицы Application.OnException в следующем куске кода "не увидит" никогда:
try
DbGrid.DataSource.DataSet.Delete;
AddToDbLog(DbGrid.DataSource.DataSet.Tag, urUser.intUserId, Format(logRefDel, [Self.Caption, recID, recName]));
except
on E: Exception do ErrorDeleteMessage(DbGrid.DataSource.DataSet.Name, E);
end;
Проблему решить в одном данном месте проще некуда: добавить еще AddToDbLog в блоке обработки. Беда только - таких мест ой как много, прога довольно большая :(
← →
TuborgBeer (2005-10-19 22:41) [4]
> Rav (19.10.05 22:17) [3]
>
> Например: ошибку при удалении данных из таблицы Application.
> OnException в следующем куске кода "не увидит" никогда:
Неправильно мыслишь:try
DbGrid.DataSource.DataSet.Delete;
AddToDbLog(DbGrid.DataSource.DataSet.Tag, urUser.intUserId, Format(logRefDel, [Self.Caption, recID, recName]));
except
on E: Exception do
begin
ErrorDeleteMessage(DbGrid.DataSource.DataSet.Name,
E);
raise;
end;
end;
← →
Rav (2005-10-20 06:34) [5]не совсем выход - опять же: проверять и править все обработчики....
неужели нет способа? :(
← →
ЮЮ © (2005-10-20 07:06) [6]>неужели нет способа ? :(
способа изменить поведение программы, не переписывая кода?
Естественно, нет!!!
Кроме как писать сразу правильно.
← →
Lin7 © (2005-10-20 10:43) [7]
> Rav (20.10.05 06:34) [5]
> не совсем выход - опять же: проверять и править все обработчики.
> ...
> неужели нет способа? :(
Компонент ExWatcher тебя выручит. :)
← →
serthgadfhw (2005-10-20 11:18) [8]http://sourceforge.net/project/showfiles.php?group_id=47514
← →
Rav (2005-10-20 20:16) [9]
> Кроме как писать сразу правильно.
Правильно? Сразу все не предусмотришь....
И все же я нашел способ облегчить себе задачу...
Во всех обработчиках я использовал функцию вывода сообщения - в нее и встроил указатель на процедуру записи в лог. А для необработанных - OnException.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c