загрузить сотни записей с VBA - PullRequest
0 голосов
/ 30 января 2020

Мне нужно загрузить огромное количество записей из Excel в msaccess. В настоящее время я делаю то, что я создал запрос "INSERT INTO" sql в VBA и перебираю свой лист данных с фактическими значениями. Примерно так

for i=1 to NumberOfRecords
Sql=Insert Into Table, cell Field, Values(cell(i,1)
next

Поскольку у меня возникают проблемы с производительностью, мне интересно, есть ли более эффективный способ сделать это с sql. Спасибо

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Рассмотрим прямой запрос Excel, который поддерживается Jet / ACE SQL Engine. Ниже предполагается, что лист Excel является табличным в формате с именованными заголовками и начинается в ячейке A1. Сохраните или запустите ниже как запрос доступа. Конечно, настройте все столбцы, путь к книге Excel и имя листа.

INSERT INTO myTable (Col1, Col2, Col3, ...)
SELECT t.Col1, Col2, Col3, ...
FROM [Excel 12.0 Xml;HDR=Yes;Database=C:\Path\To\Excel\Workbook.xlsx].[Sheet1$] t

Для данных Excel, которые не начинаются в самой верхней левой ячейке A1 и без заголовков, рассмотрите следующий запрос, который выбирает данные из листа диапазон: B100:Z450. Убедитесь, что перечисленные столбцы таблицы соответствуют типу данных один в один в данных Excel безымянных заголовков.

INSERT INTO myTable (Col1, Col2, Col3, ...)
SELECT *
FROM [Excel 12.0 Xml;HDR=No;Database=C:\Path\To\Excel\Workbook.xlsx].[Sheet1$B100:Z450] t

Для отладки всегда выполняйте часть запроса SELECT перед полным запросом на добавление.

0 голосов
/ 30 января 2020

Для решения этой проблемы я работал с массивами в Excel, записывал их на диск в необходимом формате и затем использовал метод TransferText в Access для этого файла.

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