MS Access 2010: текст в поле «RTF» (на самом деле это HMTL) показывает HTML-код вместо предполагаемого форматирования

1350
Christian Geiselmann

Эта проблема

Я работаю над базой данных в MS Access 2010, содержащей в основном текст.

Каждая из моих около 4000 записей имеет поле для заметок, содержащее фрагмент текста размером около 2000-4000 символов. В течение длительного периода времени я выделял различные части этих текстов, применяя к ним в поле формы такие вещи, как «жирный шрифт», «выделение желтым» или «подчеркивание» и т. Д. Это работало нормально.

Теперь проблема: внезапно в старых записях форматирование больше не отображается так, как задумано. Вместо этого я вижу соответствующие HTML-теги, такие как <b>, <u>, <BACKGROUND COLOR =...>, <div></div>и так далее.

Итак, разметка не потеряна. Это даже выглядит здоровым (все закрывающие теги есть). Но Access больше не отображает его правильно (жирный, желтый, маркированный список и т. Д.)

С другой стороны, те записи, с которыми я работал недавно, все еще хорошо отформатированы в RTF, как и должны.

Вопрос

Мне нужен совет, что я могу сделать, чтобы Access правильно распознал HTML и использовал его для отображения графических функций. Некоторая форма строковых операций? Некоторая форма реимпорта?

Документация

Вот пример одной такой записи, которая не отображается правильно:

Снимок экрана: текст в таблице, показывающий html вместо форматирования

Важная деталь: то, что они называют «RTF», на самом деле является HTML

Обратите внимание, что я делал все исключительно в MS Access 2010. Вся разметка установлена ​​мной лично (нет импортированной разметки), и вся эта разметка на самом деле HTML. Тем не менее, установка поля таблицы и свойств поля формы для использования HTML означает установку для них того, что они по-прежнему называют «RTF». Очевидно, они не удосужились переименовать его. Из всего, что я знаю, никакой «настоящий» RTF не задействован, это все HTML.

Недавние изменения

Я понятия не имею, что вызвало это. В последнее время я проделал много операций, особенно импортировал еще 1000 записей из внешнего источника, и некоторую дополнительную работу по программированию базы данных на VBA. Я не думаю, что импорт или программирование на VBA вызвало у него проблемы.

Возможный виновник

Однако, одна вещь, которая вполне может быть связана с этим: во время моих различных недавних действий в базе данных я узнал, что в таблице, содержащей все записи (t01_main), одно поле, которое должно было иметь форматированный текст (fiedl с именем [SummaryRTF]), не было установить в «RTF» (см. примечание выше; означает HTML), но в «обычный текст».

Как ни странно, до сих пор это не было проблемой. Поле формы, которое отображает текст и где я делаю форматирование было установлено в «RTF» (то есть HTML) в любом случае. У меня не было проблем с форматированием в то время.

Затем я настроил свойство поля таблицы на «RTF» (читай: HTML).

Я решительно полагаю, что именно это сейчас вызывает проблемы. Я полагаю, что на этом этапе в текст были внесены определенные изменения.

Итак, снова вопрос

Вопрос в том, что теперь я могу сделать, чтобы восстановить хорошее форматирование на основе HTML, который, очевидно, все еще хранится в поле.

Возможно, полезно знать

  • У меня есть резервные копии фаз моей работы, и я могу, если это поможет, импортировать оттуда более старые "здоровые" данные - (из поля таблицы со свойством: plain) в то же поле в последней версии моей таблицы (с теперь «плохие» данные, где то же поле «rtf»)
  • Я могу работать с VBA для выполнения строковых операций или чего-либо еще, или делать запросы SQL через VBA
  • Но, конечно, чем быстрее решение, тем лучше

Addenda

1) Я сейчас проверил в резервной версии базы данных (с полем в таблице, установленным как «обычный текст»). Здесь в табличном представлении текст также имеет HTML-теги; тем не менее, в поле формы (установленном как «RTF») он отображается с хорошим форматированием (жирный, желтый и т. д.)

2) Я проверил - в резервной версии - что происходит, когда вы меняете настройку поля таблицы с «Текстовый формат: обычный текст» на «Текстовый формат: RTF». Access 2010 затем отображает предупреждение следующим образом:

Преобразование полей таблицы MS Access из простого текста в (псевдо) RTF

0
RTF очень отличается от HTML. Я подозреваю, что HTML был вставлен (или, как вы говорите, импортирован из других источников), а не применен с использованием гаджетов форматирования любого типа. например, Bold является ``в html, но` \ b \ b0` в формате rtf. Yorik 6 лет назад 0
@Yorik. Важно здесь! Я сделал все это исключительно в MS Access 2010, и все форматирование там на самом деле HTML, хотя в свойствах поля оно называется «RTF». Но нет фактического «RTF» (как в вашем примере), это, я повторяю, весь (!) Чистый (!) HTML (!) Как в старых, так и в новых записях. - Я не импортирую текст RTF; Я импортирую только простой текст. Christian Geiselmann 6 лет назад 0
Извините, мои изменения, чтобы сделать ваше изображение встроенным, возможно, пересеклись с вашим последним обновлением. Я посмотрел на различия, но мне трудно разобраться, если я ранее отменил ваше предыдущее обновление. AFH 6 лет назад 0
Тогда это не RTF, вы должны изменить свои теги. Кстати, вы использовали запрос и т. Д.? Запросы иногда искажают типы полей Yorik 6 лет назад 0
@Yorik Да, ты прав. Я сделаю это прямо сейчас. Я был введен в заблуждение этой странной терминологией, которую они используют. Christian Geiselmann 6 лет назад 0
@Yorik: Использование запросов: запросы участвуют все время. Содержимое поля проходит через запрос для отображения в двух разных формах и одном отчете. - Во время обычной работы я делаю много фильтрации в основной форме (обычно с «фильтром по форме»). Фильтрация - это точка всей базы данных. Christian Geiselmann 6 лет назад 0

1 ответ на вопрос

0
Christian Geiselmann

Решение проще, чем можно было бы поверить.

MS Access имеет встроенный инструмент для решения проблемы. Как и в исходном вопросе, отображаемом в разделе «Дополнения», есть функция «PlainText», которую можно использовать с помощью запроса на обновление для удаления тегов HMTL.

Теперь, это само по себе не будет полезным, потому что мне не нужен простой текст; ценной вещью было все мое тщательное форматирование. Однако, как ни странно, он делает больше, а именно восстанавливает старое форматирование.

Итак, я выполнил запрос на обновление

UPDATE t01_main SET t01_main.SummaryTEST = PlainText([SummaryRTF]); 

заполнить новое поле [SummaryTEST]. (Я использовал новое поле, а не поле источника, чтобы быть уверенным, что смогу поменять его, если что-то пойдет не так).

Теперь форматирование снова хорошо.

Но внимание! Если некоторые из ваших полей, которые вы смешиваете через мельницу "PlainText ()", уже хороши и красивы, функция удалит ваше форматирование.

В любом случае это означало, что я должен был исключить из запроса на обновление все записи, которые все еще были в порядке, то есть те, которые я отформатировал только сегодня после того, как я установил свойство поля таблицы с «обычного» на «RTF». К счастью, все они были только с прошлого года 2017, так что я мог бы просто исключить их:

UPDATE t01_main SET t01_main.SummaryRTF = PlainText([SummaryRTF]) WHERE (((t01_main.Year)<>"2017"));