【问题标题】:How to convert a text field in an Access table to a rich text memo using VBA如何使用 VBA 将 Access 表中的文本字段转换为富文本备忘录
【发布时间】:2014-01-16 16:34:29
【问题描述】:

我的用户有许多后端 .accdb 数据库(我无法直接访问)。我需要编写一些 vba 代码来修改这些数据库中某些表的结构,以将文本字段转换为富文本备忘录。 (这些字段已经包含文本,包括 Access“富文本”,即相关的 html 编码)。

我需要:

  1. 将该字段修改为富文本备忘录。
  2. 修改现有内容(如果适用)以在表单、数据表和报告中正确显示为 Access 富文本。

我可以编写一个 SQl 语句,将字段从 TEXT (255) 修改为 MEMO:

ALTER TABLE tblSource ALTER COLUMN Detail1 MEMO

但是,这会将生成的备忘录字段保留为纯文本备忘录。

我考虑过创建一个新的富文本字段,然后复制旧字段的内容(使用 SQL CREATE TABLE 语句,后跟一条 UPDATE 语句,将纯文本函数应用于旧字段的内容,然后复制结果到新字段,然后进一步 SQl 删除旧字段并重命名新字段)但无法找到如何创建富文本备忘录(默认似乎是纯文本)。

广泛的网络搜索没有显示出我可以部署的任何其他技术。这是一个将为每个文件运行一次的过程,因此它不需要优雅或快速,但它确实需要防弹!

【问题讨论】:

    标签: sql ms-access vba ms-access-2010


    【解决方案1】:

    由于 富文本 不是数据类型,也不是可以使用 SQL 语句定义或修改的字段属性,因此您需要 VBA 来设置字段的 TextFormat属性。

    您可以调整此代码示例中的技术。

    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
    Set db = CurrentDb
    Set tdf = db.TableDefs("Table1")
    Set fld = tdf.Fields("memo_fld")
    Debug.Print "acTextFormatPlain: " & acTextFormatPlain & _
        "; acTextFormatHTMLRichText: " & acTextFormatHTMLRichText
    With fld.Properties("TextFormat")
        Debug.Print "TextFormat: " & .Value
        If .Value = acTextFormatPlain Then
            .Value = acTextFormatHTMLRichText
            Debug.Print "TextFormat changed to: " & .Value
        End If
    End With
    

    请注意,代码是从包含目标表的数据库中运行的。如果Table1 实际上是另一个 Access db 文件中表的链接,则代码将失败。

    另请注意,这仅适用于备注字段。 TextFormat 属性不是为常规文本数据类型字段创建的,因此这将引发错误 #3270,“找不到属性。”

    Debug.Print tdf.Fields("some_text").Properties("TextFormat").Value
    

    由于您会将常规文本字段转换为备注字段,因此这点可能不是问题。我只是在你偶然发现它时才提到它。

    ColeValleyGirl 发现 TextFormat 属性并不总是为新的备注字段创建。

    【讨论】:

    • 为了完成这项工作,我必须克服两个障碍。 1:它不适用于链接表,因此在这种情况下您必须打开命名数据库而不是 CurrentDB。 2. 如果 TextFormat 属性不存在(如新创建的备注字段),您必须添加它而不是更改其值。
    • @ColeValleyGirl Re point #1。是的,你也不能对链接执行ALTER TABLE ...所以我不知道你正在处理链接表。
    • 我对第 2 点感到惊讶。我用 Access 2010 和 2007 ACCDB 测试过,刚才又检查了一遍。添加一个名为“new_memo”的新备忘录字段后,这给了我 0,而不是错误:Debug.Print CurrentDb.TableDefs("Table1").Fields("new_memo").Properties("TextFormat").Value 所以我不确定你为什么找不到属性。我没有使用 MDB 格式或其他版本的 Access 进行测试。
    • 是的,我应该提到链接表,一旦我想到它,#1 并没有让我感到惊讶——我只是为了完整性而提到它,以防其他人正在寻找答案问题。 #2 是一个惊喜——我也在使用 Access 2010 和 2007 accdb 格式的数据库。
    • 两者都是优点。我试图在答案中解决它们。如果您发现有机会进一步改进此答案,请进行编辑。谢谢,这很有趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多