![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отлов нужного исключения [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 все равно не отлавливается данное исключение! :(