当前位置: 首页 > 面试题库 >

VBA将许多记录快速插入Access DB

陆昕
2023-03-14
问题内容

好,所以我有一个电子表格可以产生大量记录(〜3500)

我有以下脚本将它们插入到我的Access数据库中:

Sub putinDB()
Dim Cn As ADODB.Connection, Rs As ADODB.Recordset
Dim MyConn, sSQL As String

Dim Rw As Long, c As Long
Dim MyField, Result
Dim x As Integer
Dim accName As String, AccNum As String, sector As String, holding As String,  holdingvalue As Double, holdingdate As Date
theend = lastRow("Holdings", 1) - 1
'Set source
MyConn = "S:\Docs\Harry\Engine Client\Engine3.accdb"
'Create query
Set r = Sheets("Holdings").Range("a2")
x = 0
Do
Application.StatusBar = "Inserting record " & x + 1 & " of " & theend
accName = r.Offset(x, 0)
AccNum = r.Offset(x, 4)
sector = r.Offset(x, 2)
holding = r.Offset(x, 1)
holdingvalue = r.Offset(x, 3)
holdingdate = r.Offset(x, 5)

sSQL = "INSERT INTO Holdings (AccName, AccNum, Sector, Holding, HoldingValue, HoldingDate)"
sSQL = sSQL & " VALUES ('" & Replace(accName, "'", "''") & "', '" & AccNum & "', '" & sector & "', '" & Replace(holding, "'", "''") & "', '" & holdingvalue & "', #" & holdingdate & "#)"
Debug.Print (sSQL)
 'Create RecordSet
Set Cn = New ADODB.Connection
With Cn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .CursorLocation = adUseClient
    .Open MyConn
    Set Rs = .Execute(sSQL)
End With
x = x + 1
Loop While r.Offset(x, 0) <> "" Or x < 15
Application.StatusBar = False
End Sub

问题是,它会一条一条地循环遍历每个记录,每次都重建并执行查询,这导致执行速度非常慢(在我的PC上每秒大约有2-3条记录)

有没有一种方法可以让vba一次性将整个范围插入数据库,而无需循环遍历?谢谢


问题答案:

好,我傻 经过一番修补后,事实证明

Set Cn = New ADODB.Connection
With Cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.CursorLocation = adUseClient
.Open MyConn
End With

循环外的位使其更快。



 类似资料:
  • 问题内容: 我有一段代码创建一个新表,然后尝试将记录集值复制到表中。唯一的问题是它运行速度很慢,并且在执行下面的插入部分时访问会显示加载符号。当前,此问题正在插入500条记录,但是当我获得最终数据集时,我将需要插入大约10,000到20,000。 我想知道的是,有什么办法可以加快速度吗?还是有更好的方法?(我想做的是在运行时从RecordSet中创建具有唯一字段集的表,并为每个Record添加一个

  • 问题内容: 我想知道使用Node.js将大量插入Mongodb(尽管可能是任何其他数据库)的正确方法是什么 我以下面的代码为例,尽管我相信它是底层的,因为db.close()可以在所有异步collection.insert调用完成之前运行。 问题答案: 如果您的MongoDB服务器是2.6或更高版本,最好利用写命令 Bulk API 来执行大容量插入操作,这些操作只是服务器顶部的抽象,以便于构建大

  • 问题内容: 我有一个需要插入多个记录的场景。我有一个表结构,如id(其他表中的fk),key(char),value(char)。需要保存的输入将是上述数据的数组。示例:我有一些数组对象,例如: 在MS SQL中,我将创建并传递TVP。我不知道如何在postgres中实现。所以现在我要做的是使用pg- promise库将列表中的所有项目保存在postgres sql中的单个查询中。我找不到任何文档

  • 所以我只使用Jooq来构建查询,而不是执行查询,如下所示: 对象可以执行查询conn.asyncExecute(org.jooq.query query)。所以我的问题是,如何创建类型为org.jooq的批插入查询。查询?具体来说,给定一个列表 请注意,我知道其他问题询问如何使用Jooq进行批处理插入,但他们使用Jooq执行查询就像下面Jose Martinez的回答一样,而这里我只使用Jooq构

  • 我发誓我在上VB的时候。net课程在大学里,有一种更短的方法告诉变量将“”添加到自身中。也许x=1。不过,我现在使用的是Access,而不是visual studio。当我在VBE中尝试时,它会删除。我甚至删除了,没有任何更改 假设答案是否定的,那就没有捷径了

  • OrientDB是一个NoSQL数据库,可以存储文档和面向图形的数据。 NoSQL数据库不包含任何表,那么要如何将数据作为记录插入?在这里,您可以以类,属性,顶点和边的形式查看表数据,类表就像表,属性就像表中的文件。 可以在OrientDB中使用模式定义所有这些实体。 属性数据可以被插入到一个类中。 插入命令在数据库模式中创建一条新记录。 记录可以无模式或遵循一些指定的规则。 以下语句是“插入记录