Функция Microsoft Access TransferText: проблема с кодовой страницей - PullRequest
1 голос
/ 27 июля 2010

Я унаследовал огромную, громоздкую базу данных MS Access, и мне поручили решить проблему в ней.Проблема заключается в следующем ...

Система A экспортирует свои данные в файл .txt, разделенный конвейером.В файлах есть специальные символы, работающие правильно, например, значение «Müller» отображается при открытии этого файла в блокноте или в Excel.

Затем, БД Access импортирует файл .txt и сохраняет результат во внутренней таблице сотрудников.,Поле фамилии имеет тип данных "памятка".Способ импорта данных из файла .txt в MS Access следующий:

Call DoCmd.TransferText(acImportDelim, _
                        "tblEmployees", _
                        "tblEmployees", _
                        me.txtImportFile, _
                        True)

После выполнения этого импорта и просмотра таблицы сотрудников я заметил, что имена со специальными символами облажались.Например, «Мюллер» становится «Мюллером».Я исследовал некоторую интерактивную справку и обнаружил, что в вызове TransferText может содержаться параметр «кодовая страница», поэтому я установил его на 65001 (который, по-видимому, является кодовой страницей для Unicode):

Call DoCmd.TransferText(acImportDelim, _
                        "tblEmployees", _
                        "tblEmployees", _
                        me.txtImportFile, _
                        True, _
                        , _
                        65001)

Теперь, когда у меня естьснова запустил скрипт импорта, я не вижу никакой разницы, специальные символы все еще неправильно сформированы.У меня кончился пар, поэтому я надеюсь, что у одного из вас есть совет, как решить эту проблему ...

Ответы [ 3 ]

2 голосов
/ 27 июля 2010

Обе версии вашей операции TransferText используют SpecificationName с именем tblEmployees.Какая кодовая страница указана в этой спецификации?

Попробуйте импортировать текстовый файл вручную.Выберите «Дополнительно» в мастере импорта текста.Затем выберите Unicode в поле со списком кодовых страниц.Возможно, вам придется тестировать с различными вариантами кодовой страницы, пока вы не найдете, какой из них правильно импортирует ваш текст.

Какой бы выбор кодовой страницы ни работал, сохраните ваш выбор в качестве спецификации и используйте его в команде TransferText, не предоставляя отдельный параметр CodePage.

1 голос
/ 06 апреля 2016

Использование CodePage = 1200 (msoEncodingUnicodeLittleEndian) решило проблему в моем случае.

0 голосов
/ 21 февраля 2013

есть список юникода для использования в VBA:

http://msdn.microsoft.com/en-us/library/office/aa432511(v=office.12).aspx

...