Delphi TADOQuery loadFromFile error: «Символ« <»нельзя использовать в значении атрибута» - PullRequest
1 голос
/ 11 марта 2010

У меня есть приложение Delphi 2009, которое выполняет запрос к базе данных, используя компонент TADOQuery. Когда запрос вернул данные, я вызываю процедуру saveToFile в TADOQuery, указывая в качестве параметра формата «pfXML», который, очевидно, сохраняет данные в XML-документе. Это отлично работает.

Для просмотра данных у меня есть экран, который содержит виртуальный просмотр списка. Я использую другой компонент TADOQuery на этом экране и вызываю процедуру loadFromFile для чтения данных из XML-документа. Затем я могу отобразить данные в виртуальном списке с помощью функции fieldByName в TADOQuery. Опять же, это работает нормально - или, по крайней мере, оно работает нормально в течение последних нескольких месяцев.

Сегодня я столкнулся с ошибкой, когда я выполнил определенный запрос, и когда я попытался открыть отчет, я получил ошибку: «Символ« <»нельзя использовать в значении атрибута». Я считаю, что это ошибка XML, но я не могу найти причину. </p>

Я использовал отладчик Delphi, чтобы увидеть, где возникла ошибка, и строка, которая вызывает исключение, является строкой, которая возвращает количество записей в TADOQuery (т.е. adoquery.recordCount). Если навести курсор мыши на вызов .recordCount через точку останова в моем коде, всплывающая подсказка выдаст сообщение «Исключение Delphi за $ 1286F945».

Как я уже сказал, это работало в течение нескольких месяцев, и теперь эта ошибка неожиданно возникла. Очевидно, что в возвращаемых данных есть что-то, что вызывает проблему, но я понятия не имею, что. Я отсканировал документ XML, и там нет символов «<», которые не являются частью тега. </p>

Наконец, просто чтобы предупредить любого, кто хочет ответить комментарием «Почему вы делаете это так? Вы должны делать это так ...», одно из требований приложения состоит в том, что приложение должно разрешать пользователь может выполнить запрос и сохранить его для последующего просмотра в автономном режиме, поэтому вызовы saveToFile / loadToFile.

1 Ответ

3 голосов
/ 11 марта 2010

Проведя все утреннюю отладку приложения, я обнаружил, что проблема вызвана нежелательными данными, приводящими к тому, что тег close (>) не попадает в конец одной из строк файла.

...