Доступ к заголовкам таблицы соответствий с помощью столбцов таблицы импорта - PullRequest
0 голосов
/ 30 апреля 2020

новый для Access здесь, так что надеюсь, что кто-то может помочь мне с этим ... Я пытаюсь импортировать файл .CSV в БД, которая работает нормально и все. Проблема заключается в том, что файл .CSV будет иметь различные столбцы и может отличаться от последовательности, заданной в таблицах БД. Похоже, что доступ импортирует все столбцы в строке независимо от имени столбца.

Использование этого Do.Cmd ниже:

strPathFile = strPath & strFile
DoCmd.TransferText acImportDelim, "pimmig2", strTable, strPathFile, blnHasFieldNames

Например, заголовки таблиц в Access:

Action, Type, Retek Hierarchy, ID, Name

.CSV заголовки файла:

Action, Type, Banner, From Banner, Retek Hierarchy, Master Catalogue, ID

Так что получается, что после импорта столбец «Из баннера» попадает в «Иерархию ретек» и все данные в таблице поднимаются вверх ...

Я установил первичные ключи и все, у SPECS все сделано, поэтому не хватает опций ... :( помогите, пожалуйста ...

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Действительно простой способ справиться с этим?

Импорт в временную таблицу. Итак, вы очищаете стол (или бросаете его). Теперь импортируйте в эту таблицу.

Затем вы запускаете построитель запросов и создаете запрос на добавление. Прелесть этого подхода в том, что вы можете не только настроить отображение поля на поле, но и ДАЖЕ сделать это, если имена полей не являются точными совпадениями. Как только вы создадите этот запрос на добавление со всеми отображениями полей?

Сохраните этот запрос.

Итак, теперь ваши шаги: Импорт данных в эту таблицу Выполните запрос на добавление.

И вы даже можете добавить форматирование или приведение типов данных в запросе добавления. Таким образом, вы можете отобразить поля и делать это без необходимости писать / вводить поля в коде.

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

Таким образом, теоретически вы можете выбрать хорошие имена столбцов для ваших производственных данных, а импорт может иметь любые имена полей, которые вы хотите. Запрос на добавление может быть создан на 100% с помощью построителя запросов, а также приветствуется возможность выбрать, какие столбцы go и для каких рабочих столбцов будут выполнены, выбрав сопоставление полей со списками в построителе запросов.

Другая хорошая способность этой временной таблицы? Что ж, вы можете выполнить какой-либо запрос на обновление или даже некоторый код зацикливания VBA для очистки или обработать данные перед запуском этого одного запроса на добавление, чтобы отправить данные в окончательную рабочую таблицу. Таким образом, вы не только получаете отображение поля (без необходимости писать код), но вы также получаете возможность очистить или даже удалить поврежденные строки данных перед отправкой (добавлением) импортированных данных в фактическую рабочую таблицу.

0 голосов
/ 05 мая 2020

На всякий случай, если у кого-то возникнет та же проблема, что и у меня. Я использовал логику c, описанную Альбертом выше. Итак, переместился во временную таблицу, а затем вставил определенные столбцы в таблицу, подключенную через соединение ODB C:

Dim db As DAO.Database

' Re-link the CSV Table
Set db = CurrentDb
On Error Resume Next:   db.TableDefs.Delete "tblImport":   On Error GoTo 0
db.TableDefs.Refresh
DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tblImport", _
    FileName:="C:\MyData.csv", HasFieldNames:=true
db.TableDefs.Refresh

' Perform the import
db.Execute "INSERT INTO someTable SELECT col1, col2, ... FROM tblImport " _
   & "WHERE NOT F1 IN ('A1', 'A2', 'A3')"
db.Close:   Set db = Nothing

Поскольку в моем файле .CSV были пробелы в имени, пришлось заключать их в квадратные скобки : [First Name]

...