问题
我正在处理 MS Access 2010 中一个主要包含文本的数据库。
我的大约 4000 条记录中的每一条都有一个备注字段,其中包含一段大约 2000-4000 个字符的文本。长期以来,我一直通过在表单字段中应用“粗体”或“突出显示黄色”或“下划线”等来突出显示这些文本的各个部分。这很有效。
现在的问题是:突然之间,旧记录中的格式不再按预期显示。相反,我看到的是相应的 HTML 标签,例如<b>, <u>, <BACKGROUND COLOR =...>, <div></div>
等。
因此,标记没有丢失。它甚至看起来很健康(所有结束标记都在那里)。但 Access 不再正确显示它(粗体、黄色、项目符号列表等)。
另一方面,我最近处理的那些记录仍然按照 RTF 格式很好地格式化。
问题
我需要建议,我该怎么做才能让 Access 正确识别 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 执行字符串操作或其他操作,或者通过 VBA 执行 SQL 查询
- 但当然,解决方案越快越好
附加物
1) 我现在检查了数据库的备份版本(表中的字段设置为“纯文本”)。在这里,在表视图中,文本也有 html 标签;然而,在表单字段(设置为“RTF”)它显示格式很好(粗体、黄色等)
2) 我在备份版本中检查了将表格字段设置从“文本格式:纯文本”更改为“文本格式:RTF”时会发生什么情况。然后,Access 2010 会显示以下警报:
答案1
解决方案比人们想象的要简单。
MS Access 有一个内置工具可以修复此问题。如原始问题中“附录”下可见的一样,有一个名为“PlainText”的函数,可以通过更新查询来删除 HMTL 标签。
现在,仅此一点用处都没有,因为我不需要纯文本;有价值的是我精心格式化的所有东西。然而,奇怪的是,它的作用不止于此,即恢复旧格式。
所以我所做的就是运行更新查询
UPDATE t01_main SET t01_main.SummaryTEST = PlainText([SummaryRTF]);
填写新字段 [SummaryTEST]。(我使用新字段而不是源字段,只是为了确保如果出现任何问题我可以撤消它)。
现在格式又变得很好了。
但请注意!如果你通过“PlainText()”函数混合的一些字段已经很好很漂亮了,那么该函数将消除你的格式。
在某些情况下,这意味着我必须从更新查询中排除所有仍然正常的记录,即那些我今天刚刚将表字段属性从“plain”设置为“RTF”后格式化的记录。幸运的是,所有这些都是去年 2017 年的,所以我可以简单地通过以下方式排除它们:
UPDATE t01_main SET t01_main.SummaryRTF = PlainText([SummaryRTF]) WHERE (((t01_main.Year)<>"2017"));