Иностранные персонажи появляются как????? в VBA 2003 как настроить UTF-8?

У меня есть база данных в Access 2003, которая должна работать с символами иностранного языка. Символы хорошо отображаются в таблице. Однако, когда VBA пытается прочитать их, он не может этого сделать.

Например, столбец ANSWER_TEXT из cf_Answer отображает: 佛吉尼亞海灘

Но выбор оператора в VBA:

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 имеет тип данных memo, Или, может быть, есть способ настроить VBA для понимания этих символов?

Может ли кто-нибудь хотя бы указать мне правильное направление?

1 ответ

Решение

Проблема может быть связана с тем, где вы отображаете этот текст в Unicode.

Я вставил те же символы в текстовое поле в моей таблице. Получение их с DLookup в окне "Немедленно" заставляет их отображаться в виде вопросительных знаков, потому что окно "Немедленно" не отображает юникод, как вы хотите.

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

MsgBox также отображает их в виде вопросительных знаков.

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

Однако элемент управления текстового поля формы имеет возможность правильно обрабатывать юникод. Привязка текстового поля к полю, содержащему эти символы, дает мне это...

Текстовое поле с символами Unicode

Запрос также может ссылаться на символы Юникода, и он использует один в своем WHERE и правильно отображает их все при открытии запроса в представлении таблицы.

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

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

В комментарии вы указали, что запись этих символов юникода в текстовый файл приведет к появлению только вопросительных знаков. Тем не менее, если вы запишите Unicode в текстовый файл (как в процедуре ниже) и отобразите файл в редакторе, который способен правильно обрабатывать Unicode, вы увидите те же символы, что и в Datasheet View таблицы, в которой они хранятся, Этот снимок экрана показывает Wordpad, открытый с файлом, который был создан из кода ниже.

WordPad, отображающий текст 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
Другие вопросы по тегам