【发布时间】:2015-08-13 12:52:40
【问题描述】:
我有一个 Access 数据库和一个 Excel 工作簿。 我需要做的是查询数据库并将查询粘贴到工作表中。
问题是运行时。我已经逐步完成了该程序并且一切正常,但是它运行得非常慢,我们说每个查询最多 30 秒的运行时间,尽管这个运行时间的大部分来自 CopyFromRecordset 调用。
数据库在我正在查询的表中有超过 800k 行。 目前在我公司,每天早上都有人手动查询表格并将它们复制并粘贴到 Excel 中。我正在尝试删除此进程。
这是我所拥有的:
Sub new1()
Dim objAdoCon As Object
Dim objRcdSet As Object
' gets query information '
Dim DataArr()
Sheets("Data2").Activate
DataArr = Range("A1:B40")
For i = 1 To UBound(DataArr)
job = DataArr(i, 1)
dest = DataArr(i, 2)
If InStr(dest, "HT") > 0 Then
OpCode = "3863"
ElseIf InStr(dest, "HIP") > 0 Then
OpCode = "35DM"
End If
strQry = "SELECT * from [BATCHNO] WHERE ([BATCHNO].[Job]='" & job & "') AND ([BATCHNO].[OperationCode] = " & "'" & OpCode & "')"
Set objAdoCon = CreateObject("ADODB.Connection")
Set objRcdSet = CreateObject("ADODB.Recordset")
objAdoCon.Open "Provider = Microsoft.Jet.oledb.4.0;Data Source = C:\Users\v-adamsje\Desktop\HTmaster.mdb"
'long run time
objRcdSet.Open strQry, objAdoCon
'very long run time
ThisWorkbook.Worksheets(dest).Range("A2").CopyFromRecordset objRcdSet
Set objAdoCon = Nothing
Set objRcdSet = Nothing
Next i
End Sub
感谢任何帮助。我是 VBA 和 Access 的新手,所以这很容易解决。谢谢
【问题讨论】:
-
尝试将光标位置设置为客户端:objRcdSet.CursorLocation = adUseClient。您必须在打开记录集之前执行此操作。
-
已尝试,运行时间仍然相同。还有其他建议吗?