2

我在 Access 2003 中有一个需要使用外语字符的数据库。字符在表格中显示得很好。但是,当 VBA 尝试读取它们时,它无法做到。

例如,cf_Answer 中的 ANSWER_TEXT 列显示:佛吉尼亚海滩

但是 VBA 中的 select 语句:

sqlstmt = "SELECT ANSWER_TEXT AS ans_text FROM cf_Answer"
Set rst_a = dbs.OpenRecordset(sqlstmt, dbOpenSnapshot)

rst_a![ans_text]返回??????

我知道这与 UTF-8 编码有关,但我找不到设置它的方法。有没有办法在表格中设置它?目前, ANSWER_TEXT 是 datatype memo。或者也许有一种方法可以设置 VBA 来理解这些字符?

谁能至少指出我正确的方向?

4

1 回答 1

3

问题可能是由于您显示该 unicode 文本的位置。

我将这些相同的字符粘贴到表中的文本字段中。在即时窗口中检索它们DLookup会导致它们显示为问号,因为即时窗口不会按照您的意愿显示 unicode。

? DLookup("some_text", "tblFoo", "id = 1")
??????

AMsgBox也将它们显示为问号。

MsgBox DLookup("some_text", "tblFoo", "id = 1")

但是,表单文本框控件确实具有正确处理 unicode 的能力。将文本框绑定到包含这些字符的字段给了我这个......

带有 Unicode 字符的文本框

查询还可以引用 unicode 字符,这在其WHERE子句中使用一个,并在数据表视图中打开查询时正确显示它们。

SELECT f.id, f.some_text
FROM tblFoo AS f
WHERE (((f.some_text) Like '佛*'));

我怀疑这一切都归结为您尝试使用这些 un​​icode 字符的方式以及显示它们的位置。

在评论中,您说将这些 un​​icode 字符写入文本文件只会产生问号。但是,如果您将 unicode 写入文本文件(如下面的过程)并在能够正确处理 unicode 的编辑器中显示该文件,您将看到在存储它们的表的数据表视图中看到的相同字符. 此屏幕截图显示使用从下面的代码创建的文件打开的写字板。

显示 Unicode 文本的写字板

Dim objFso As Scripting.FileSystemObject
Dim objFile As Scripting.TextStream

Set objFso = New Scripting.FileSystemObject
Set objFile = objFso.OpenTextFile(CurrentProject.Path & _
    Chr(92) & "unicode.txt", ForWriting, True, TristateTrue)
objFile.Write DLookup("some_text", "tblFoo", "id = 1")
objFile.Close
Set objFile = Nothing
Set objFso = Nothing
于 2013-04-09T20:03:27.983 回答