excel - VBA:使用 Excel 查询 Access。为什么这么慢?

标签 excel vba ado jet

我在网上找到了这段代码来查询Access并将数据输入到excel(2003)中,但它比应该的要慢得多:

Sub DataPull(SQLQuery, CellPaste)
Dim Con As New ADODB.Connection
Dim RST As New ADODB.Recordset
Dim DBlocation As String, DBName As String
Dim ContractingQuery As String

If SQLQuery = "" Then

Else
    DBName = Range("DBName")
    If Right(DBName, 4) <> ".mdb" Then DBName = DBName + ".mdb"

    DBlocation = ActiveWorkbook.Path
    If Right(DBlocation, 1) <> "\" Then DBlocation = DBlocation + "\"

    Con.ConnectionString = DBlocation + DBName
    Con.Provider = "Microsoft.Jet.OLEDB.4.0"
    Con.Open

    Set RST = Con.Execute(SQLQuery)
    Range(CellPaste).CopyFromRecordset RST

    Con.Close
End If

End Sub

问题是这段代码需要很长时间。如果我打开 Access 并在其中运行查询,则大约需要 1/10 的时间。有没有办法加快这个速度?或者有什么原因可能需要这么长时间?我所有的查询都是简单的选择查询,带有简单的 where 语句并且没有连接。甚至是 select * from [test]查询花费的时间比它应该的要长得多。

编辑:我应该指定该行
Range(CellPaste).CopyFromRecordset RST
是一个需要很长时间的人。

最佳答案

我不是专家,但我运行几乎完全相同的代码,结果很好。一个区别是我使用 Command对象以及 Connection目的。你在哪里

Set RST = Con.Execute(SQLQuery)


Dim cmd As ADODB.Command
Set cmd.ActiveConnection = con
cmd.CommandText = SQLQuery
Set RST = cmd.Execute

我不知道这是否或为什么会有所帮助,但也许会? :-)

关于excel - VBA:使用 Excel 查询 Access。为什么这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574213/

相关文章:

javascript - 使用 JavaScript 打开记录集时出现 IE8 ADO 警告

linux - 在 Linux 中使用命令行将 xlsx 转换为 csv

excel - 间接增加单元格引用 A1 A2 A3 等

excel - 如何确定我的函数所在的工作簿中的工作表名称?

c++ - 如何在 C++ 中检查 DBNull - ADO 记录集字段?

java - ASP 中的 EOF 和 BOF

Excel VBA 宏抓取

c# - 两个程序试图读取 excel,一个成功,一个失败,代码相同

sql - 使用 VBA 将新记录插入 Access 2007 数据库

xml - 查询XML文档-没有结果时如何跳过或调整索引?