Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отлов нужного исключения [D7, XP]


Megabyte ©   (2007-03-26 10:16:00) 

Есть компонент TXMLTransform в программе, которая парсит XML-файлы, преобразуя их в нужный формат для вставки в БД.
Так получилось, что теперь попадаются криво сформированные XML-файлы, надо обрабатывать исключение. message исключения выглядит так: "XML Parse Error".
Если я пишу так: on E: XML PArse Error do ..., то ругается на неизвестный идентификатор. Посмотрел в исходнике по XML-компонентам, там описано только одно исключение TranslateException.
При ошибке парсинга мой код не отлавливает на TranslateException исключение.
Может кто подскажет нужный класс исключения или где его найти/посмотреть?
Среди стандартных классов нужный не нашел. Самый общий класс Exception не хочется использовать, т.к. могут быть и другие ошибки.


Megabyte   (2007-03-26 11:35:00) [1]

Опс, само собой вместо PChar(IntToStr(e.message))
будет PChar(e.message)
Просто тестировал там...


Megabyte   (2007-03-26 11:33:00) [2]



> begin
 try
   begin
     tmr_upd.Enabled := false;
     btn_exit.Caption := '???????';
     dtini := ReadIni;
     datm.fdb_scrp.DBName := dtini.namedb;
     datm.fdb_scrp.Connected := true;
     if findfirst(dtini.xmldir + '\*.xml', faAnyFile, search_imei) = 0 then
     begin
       repeat
         trans_upd.SourceXmlFile := dtini.xmldir + '\' + search_imei.Name;
         cds_psn.Active := false;
            cds_psn.XMLData := trans_upd.Data; //ошибка парсинга здесь
           cds_psn.Active := true;
           //???? ?????? PSN, ?? ?????????? ? errdir
           if cds_psn.FieldList.Fields[0].Value = '' then
           begin
             MoveFileTo(dtini.xmldir, dtini.errdir, search_imei.Name);
             continue;
           end;
           onlyname := search_imei.Name;
           delete(onlyname, length(onlyname)-3,4);
           datm.upd_psn(onlyname, cds_psn.FieldList.Fields[0].AsString);
           //???? ???? ???????????? ? ??, ?? ?????????? ? arhdir
           if fcount then
           begin
             MoveFileTo(dtini.xmldir, dtini.arhdir, search_imei.Name);
           end
           else
           //??????????? ???????????? ?????? ? ???????????? imei ? ????
           //? ??????????? ? ????? Undefined
           begin
             MoveFileTo(dtini.xmldir, dtini.logdir, search_imei.Name);
             WriteLogFile(search_imei.Name);
           end; //else
       until FindNext(search_imei) <> 0;
     end; //if
   end; //try
 except
   on E: "EDOMParseError/DomException/Exception" do
   begin
     MessageBox(0, PChar(IntToStr(e.message)), '??????????????',   MB_ICONWARNING);
   end;
 end; //except


Это, естественно, написал "EDOMParseError/DomException/Exception" как возможные варианты.
Работает только при On E: Exception


Плохиш   (2007-03-26 11:27:00) [3]

Осмелюсь предположить ошибку в 17й строке.


Megabyte   (2007-03-26 11:17:00) [4]


> EParserException?

Undeclared Identifier.

Суть в том, что не ловится на тот тип исключения, кот. указывается при возникновении этого исключения: DOMException!!!


Плохиш   (2007-03-26 10:57:00) [5]


> Может кто подскажет нужный класс исключения или где его
> найти/посмотреть?

А в отладчике типисключения посмотреть, слабо?


Плохиш   (2007-03-26 10:57:00) [6]

EParserException?


Megabyte   (2007-03-26 10:55:00) [7]

Хм, я немножко стормозил. Из Дельфы запустил прогу, она выдала нужный класс исключения DOMException, НО в except все равно не отлавливается данное исключение! :(


Наверх

Титульная страница Поиск, карта сайта Написать письмо