Excel VBA,如何做多个数据库条目

时间:2009-12-29 16:07:29

标签: sql excel vba

我需要每天使用数千个条目填充数据库,但我的代码目前手动将每个条目一次插入数据库中。

Do While lngSQLLoop < lngCurrentRecord
    lngSQLLoop = lngSQLLoop + 1
    sql = "INSERT INTO db (key1, key2) VALUES ('value1', 'value2');"
    result = bInsertIntoDatabase(sql, True)
    If result = false Then lngFailed = lngFailed + 1
Loop

这样可行,但每100个条目大约需要5秒钟。是否有更有效的方法将其放入数据库?我试过了

INSERT INTO db(key1,key2)VALUES('value1-1','value2-1'),('value1-2','value2-2'),('value1-3','value2- 3' );

但失败的冒号失败了;错误,表明它不喜欢像这样列出的值。有没有办法让VBA这样做?

4 个答案:

答案 0 :(得分:4)

多个(), ()子句的使用仅适用于SQL Server 2008。

但是你很幸运:你可以通过简单地连接你的SQL语句并批量调用bInsertIntoDatabase来批量处理它们。

这种方法的唯一缺点是,如果批处理中的一个语句失败,批处理中的每个后续语句也会失败。

因此,如果失败是一个常规问题(例如,来自关键冲突),则需要使用其他方法。一种解决方案是:

  • 首先将批次插入临时表(没有唯一索引,因此最初避免失败)
  • 使用WHERE子句在主表中执行最后一次插入以防止错误
  • 获取结果计数并从临时表中的记录总数中减去以获得失败次数。

答案 1 :(得分:0)

如果可以通过数据库驱动程序(如ODBC)访问数据源,并且数据库框架支持异构查询,则应该可以执行以下操作:

INSERT INTO targetDBtable (key1, key2)
VALUES (SELECT key1, key2 FROM sourceDBtable);

答案 2 :(得分:0)

使用带有可更新记录集的.AddNew和.Update似乎很快:在我的系统上大约需要0.25秒才能添加10000条没有错误的记录,或者需要1.25秒来添加10000条记录,其中包含10000条错误。

答案 3 :(得分:0)

首先将数据保存为CSV文件,然后使用Access的TransferText方法(DoCmd对象)一次性加载到Access表中。请记住之后删除CSV文件。

即使您从Excel运行代码,您仍然可以通过自动化在Access中执行TransferText方法。