Как отловить ошибку Fr4 Делфями

отредактировано March 2014 Раздел: FastReport 4.0
Всем привет. В Делфи XE2 делаю программу, которая в цикле формирует отчеты из шаблона FR, передавая ему предварительно один или несколько значений параметров. По результатам формирования программа выгружает лог если в данном процессе были ошибки. Процедура, грубо говоря, выглядит так:
try
for i:=0 to 20 do
begin
.....
TfrxReport(form1.findcomponent(name_rep)).PrepareReport(true);
TfrxReport(form1.findcomponent(name_rep)).PreviewPages.SaveToFile(i+'.fp3');
end
except
on E : Exception do
           //тут прописываем лог с ошибками
            err_log.Lines.Add(datetimetostr(now)+' '+ini.ReadString('Отчеты',name_rep,'')+';  '+E.Message);
end;
И все вроде ничего, только в процессе выяснилось, что ошибки при формировании отчета (ошибки FR) никак не отлавливаются процедурой "Try...except", просто выводится на экран сообщение, нажимаешь на ОК и цикл продолжается дальше, в лог, понятно, ничего не записывается. Вероятней всего, что ошибки в FR отлавливаются в самом FR и второй раз в делфи не перехватить. Что в этом случае можно сделать? не хотелось, чтоб сообщения вываливались на экран, ну или в крайнем случае нужно, чтоб как то эти ошибки можно было помещать в лог.

Комментарии

  • отредактировано 20:40
    Для начала поройтесь в исходниках FastReport, если куплены.
    На первом этапе я нашёл такую штуку:
    frxCommonErrorHandler(),
    но в каком исходнике она находится, я не знаю, т.к. у меня есть только скачанный с интернета frxClass.pas от какой-то из ломаных 4-х версий.
  • pkapka
    отредактировано March 2014
    У TfrxReport есть свойство Errors, это TStrings, куда сбрасываются все ошибки в процессе Prepare отчета.
    Ещё есть TfrxReport.EngineOptions.NewSilentMode, которое можно установить в simReThrow, тогда ошибки не будут показываться, а как раз вызовется исключение, куда как текст будет передан Errors.Text
  • отредактировано 20:40
    pka написал: »
    У TfrxReport есть свойство Errors, это TStrings, куда сбрасываются все ошибки в процессе Prepare отчета.
    Ещё есть TfrxReport.EngineOptions.NewSilentMode, которое можно установить в simReThrow, тогда ошибки не будут показываться, а как раз вызовется исключение, куда как текст будет передан Errors.Text
    Спасибо большое! :) Все получилось, как нужно было, поставил свойство в simReThrow и все ошибки стали перехватываться try.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.