使用VBA上载数百条记录

问题描述 投票:-1回答:2

我需要将大量记录从excel上传到msaccess。目前,我的工作是在VBA中创建一个“ INSERT INTO” SQL查询,并使用实际值遍历我的数据表。像这样的东西

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

当我遇到性能问题时,我想知道是否存在使用sql的更有效方法。谢谢

sql excel vba ms-access bulkinsert
2个回答
1
投票

考虑Jet / ACE SQL引擎支持的直接Excel查询。下面假设Excel工作表的格式为表格,带有已命名的标题,并且以A1单元格开头。保存或在下面作为Access查询运行。当然,请调整所有列,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

对于不是从最上方的A1单元格开始且没有标题的Excel数据,请考虑以下查询,该查询从工作表范围中选择数据: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
投票

我用来解决此问题的方法是在Excel中使用数组,以所需格式将它们写出到磁盘,然后对该文件使用Access的TransferText方法。


0
投票

考虑Jet / ACE SQL引擎支持的直接Excel查询。下面假设Excel工作表的格式为表格,带有已命名的标题,并且以A1单元格开头。保存或在下面作为Access查询运行。当然,请调整所有列,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

对于不是从最上方的A1单元格开始且没有标题的Excel数据,请考虑以下查询,该查询从工作表范围中选择数据: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部分。

© www.soinside.com 2019 - 2024. All rights reserved.