Ошибка преобразования типа доступа при импорте из Excel - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь импортировать Excel для доступа к БД, и некоторые номера клиентов не могут быть импортированы из-за сбоя преобразования типов. Это 12 записей из 66 тысяч. Обычно номер клиента - это число, но эти 12 являются строками, такими как ABCDEFT001. Я попытался установить в поле таблицы «Длинный текст» или «Короткий текст», они все еще не импортируются (только в таблицу ImportError). Вы знаете, что еще я могу попробовать? Заранее большое спасибо! PS я пытаюсь импортировать используя DoCmd.TransferSpreadsheet

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "Inv level", "Path/to/file.xlsb", True, "Sheetname!"

1 Ответ

2 голосов
/ 06 апреля 2020

Эта стратегия связывается с файлом Excel, вместо того, чтобы напрямую импортировать его, а затем выбирает из него данные и преобразует все поля, которые в них нуждаются, в правильный тип данных.

Sub ImportFromExcel()
    Dim pathToFile As String
    Dim targetTableName As String
    Dim sql As String

    pathToFile = "C:\Path\To\File.xlsx"
    targetTableName = "ImportResults"

    '//create the link
    DoCmd.TransferSpreadsheet acLink, _
                              acSpreadsheetTypeExcel12, _
                              targetTableName, _
                              pathToFile, _
                              True '//This part only if the excel file has field headers


    '//import
    sql = "SELECT Field1Name, CStr(CustNumber) AS CustNumber, Field3Name INTO NewImportTable FROM " & targetTableName
    CurrentDb.Execute sql

    '//remove the link
    DoCmd.DeleteObject acTable, targetTableName
End Sub

*** Две ловушки этого кода, о которых следует знать:

1) Перед запуском этого кода следует удалить любую таблицу с именем «NewImportTable», иначе получить ошибку «Таблица уже существует».

2) Если в этом Sub произойдут какие-либо ошибки перед удалением ссылки, у вас возникнет проблема при следующем запуске, так как будет создана ссылка с именем "ImportResults1", так как "ImportResults" будет все-еще существует. Действительно страшно то, что здесь не было бы ошибок. Это создаст «ImportResults1» и затем запустит ваш sql в «ImportResults» !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...