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

Вниз

"Глобальный" перехват исключений   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
3-1127822146
VitGun
2005-09-27 15:55
2005.11.13
База Paradox и DOS-приложение


2-1129821214
xVEst
2005-10-20 19:13
2005.11.13
Проблема с компонентом Rave


4-1126372344
illy
2005-09-10 21:12
2005.11.13
Запуск закрытие приложений


4-1126705615
Новичоккк
2005-09-14 17:46
2005.11.13
Определение заголовка окна по PID


2-1130232065
BaxTMaH
2005-10-25 13:21
2005.11.13
Объявление переменных