![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Глобальный" перехват исключений [D5, Win2k, WinXP]
Rav © (2005-10-19 20:55:00)Доброго времени суток, уважаемые!
Суть проблемы такова: есть программа для работы с БД, при работе естественно могут возникать различные исключения, которые обрабатываются в разных местах и по разному. Все было прекрасно, пока к данной проге я не прикрутил журнал работы. Возникла проблема: как "перехватить" любое (или почти любое, меня болше интересуют БД) исключение, возникающее в процессе работы программы, но не обрабатывать его, а просто записать сообщение в журнал работы, а затем передать его дальше, "по месту назанчения"?
Может быть есть ссылки на статьи. где почитать по теме? ... я не нашел :(
Заранее спасибо за помощь?
Rav (2005-10-20 20:16:00) [1]
> Кроме как писать сразу правильно.
Правильно? Сразу все не предусмотришь....
И все же я нашел способ облегчить себе задачу...
Во всех обработчиках я использовал функцию вывода сообщения - в нее и встроил указатель на процедуру записи в лог. А для необработанных - OnException.
serthgadfhw (2005-10-20 11:18:00) [2]http://sourceforge.net/project/showfiles.php?group_id=47514
Lin7 (2005-10-20 10:43:00) [3]
> Rav (20.10.05 06:34) [5]
> не совсем выход - опять же: проверять и править все обработчики.
> ...
> неужели нет способа? :(
Компонент ExWatcher тебя выручит. :)
ЮЮ (2005-10-20 07:06:00) [4]>неужели нет способа ? :(
способа изменить поведение программы, не переписывая кода?
Естественно, нет!!!
Кроме как писать сразу правильно.
Rav (2005-10-20 06:34:00) [5]не совсем выход - опять же: проверять и править все обработчики....
неужели нет способа? :(
TuborgBeer (2005-10-19 22:41:00) [6]
> 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-19 22:17:00) [7]Например: ошибку при удалении данных из таблицы 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 в блоке обработки. Беда только - таких мест ой как много, прога довольно большая :(
Rav (2005-10-19 22:09:00) [8]
> Application.OnException
Не подходит :( Уже пытался :(
Application.OnException обрабатывает исключения, не перехваченные "местными" обработчиками, а мне нужно перехватить ДО "местной" обработки, а затем вернуть туда же.
Sam Stone (2005-10-19 21:54:00) [9]Application.OnException