Моя цель - автоматизировать импорт CSV-файла в таблицу Access, сохраняя все данные в файле csv, в частности, за ведущие нули.Импорт CSV-файла в таблицу MSAccess без потери ведущих нулей
Каждый файл csv будет иметь различное количество столбцов, поэтому таблица, которую необходимо импортировать, должна создаваться «на лету». Кроме того, было принято решение о том, что каждый столбец определяется как текст (255).
Вот соответствующий код для этого процесса, оставляя часть, в которой пользователь переходит в папку и выбирает CSV-файл.
Заметки о переменных:
FilePathAndName содержит полный путь и имя файла файла .csv
TableName содержит имя таблицы MSAccess я создаю
HeaderRow содержит первую строку csv-файла с именами столбцов. Имена столбцов никогда не будут содержать запятую.
ColumnNames() - это массив для хранения имен столбцов.
SQLStatement проведет SQL DDL заявление, чтобы создать таблицу
Open FilePathAndName For Input As #1
' read first row to get column names because that will change every time
Line Input #1, HeaderRow
Close #1
ColumnNames = Split(HeaderRow, ",")
' create MSAccess table via DDL commands
TableName = "GROUPS_TEST"
SQLStatement = "CREATE TABLE " & TableName & "("
For i = 0 To UBound(ColumnNames)
SQLStatement = SQLStatement & "[" & ColumnNames(i) & "] text(255)"
If i < UBound(ColumnNames) Then
SQLStatement = SQLStatement & ", "
End If
Next i
SQLStatement = SQLStatement & ")"
DoCmd.RunSQL SQLStatement
' load .csv file into the table that was just created
DoCmd.TransferText acImportDelim, , TableName, FilePathAndName, True
Он работает безупречно вплоть до и включая заявление DoCmd.RunSQL, где создается таблица. Все столбцы определяются как текст (255), потому что есть некоторые столбцы, у которых есть ведущие нули, которые необходимо сохранить. Это не цифры; они являются буквенно-цифровыми значениями. Тогда проблема начинается. Я выполняю действие TransferText, и данные импортируются в таблицу из CSV-файла. За исключением того, что он разделяет ведущие нули от значений, которые имеют их , хотя я определенно определил все столбцы как столбцы TEXT.
Я уже несколько часов работаю в Интернете, и ничего не получилось. У меня нет спецификации импорта/экспорта из-за динамического характера файлов .csv. И я не знаю, что это все равно.
Одна вещь, о которой упоминалось, это редактирование параметра реестра для текстовых файлов в MSAccess, но я не смог найти особенности. Я использую Access 2007. Еще одна идея, которая возникла, заключалась в использовании файла schema.ini, но опять же из-за динамической природы файлов csv я не знаю, будет ли это работать.
Любая помощь будет с благодарностью принята. Спасибо заранее.
Являются ли ведущие ноль динамическими или длина поля фиксирована? Если исправлено, вы можете установить свойство форматирования столбцов, чтобы сохранить ведущие нули –
, так как вы читаете файл, чтобы получить количество столбцов, что мешает вам прокручивать строку и вставлять все строки? Я знаю, что это не тот ответ, который вам нужен, а просто сказать. КСТАТИ. Если вы действительно хотите это исправить, добавьте пустую/тестовую строку поверх вашего .csv-файла, чтобы все кубы имели текстовые значения. он заставит доступ читать все столбцы в виде текста, в противном случае доступ преобразует столбцы при передаче, а ваш - один из его побочных эффектов. –
@random_answer_guy - ведущие нули являются динамическими. – Carl