我的用户有许多后端.accdb数据库(我无法直接访问)。我需要编写一些vba来修改这些数据库中某些表的结构,以将Text Fields转换为Rich Text备忘录。 (这些字段已经包含文本,包括Access“富文本”,即相关的html编码)。
我需要:
我可以编写一个SQl语句,将TEXT(255)中的字段修改为MEMO:
ALTER TABLE tblSource ALTER COLUMN Detail1 MEMO
但是,这会将生成的备注字段保留为纯文本备忘录。
我考虑过创建一个新的Rich Text字段然后复制旧的Rich Text字段(使用SQL CREATE TABLE语句后跟UPDATE语句,该语句将Plaintext函数应用于旧字段的内容,然后复制结果到新的字段,然后进一步SQl删除旧字段并重命名新的)但无法找到如何创建一个富文本备忘录(默认似乎是纯文本)。
广泛的网络搜索没有显示我可以部署的任何其他技术。这是一个为每个文件运行一次的过程,因此它不需要优雅或快速,但它确实需要防弹!
答案 0 :(得分:3)
由于 Rich Text 不是数据类型,并且不是可以使用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 属性。