VBA ADODB连接关闭时间过长 - Excel 2010

时间:2015-01-29 13:08:48

标签: vba excel-vba adodb ms-access-2013 excel

我使用ADODB连接从Access 2013数据库获取数据并在Excel中显示。我已经使用Excel 2013在VBA中成功开发了一个高效的项目(时间明智)。

但是,当我尝试在Excel 2010中执行我的Excel应用程序时,某些操作的性能明显下降。

我设法发现Excel 2010中缺乏性能的原因是Excel 2010从内存中释放数据库连接所需的时间。

下面,我提供了两个代码示例,这些代码在Excel 2010中运行缓慢但在Excel 2013中运行不正确。

我将变量设置为Nothing,只是为了确认这些变量的释放时间过长。如果我没有将它们设置为Nothing,问题仍然存在,因为当这些变量超出范围时,它们会自动释放(End Sub需要太长时间)。

Sub test1()

    Dim rs As ADODB.Recordset
    Dim strSQL As String


    strSQL = "SELECT * FROM Category"

    Set rs = New ADODB.Recordset
    rs.Open strSQL, "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\mydatabase.accdb"

    rs.Close
    Set rs = Nothing ' Takes too long in Excel 2010, but runs instantinaly in Excel 2013.

End Sub

我甚至尝试将代码更改为首先启动连接:

Sub test2()

    Dim rs As ADODB.Recordset
    Dim conn As ADODB.Connection
    Dim strSQL As String


    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\mydatabase.accdb"

    strSQL = "SELECT * FROM Category"

    Set rs = New ADODB.Recordset
    rs.Open strSQL, conn

    rs.Close
    Set rs = Nothing

    conn.Close ' Takes too long in Excel 2010, but runs instantinaly in Excel 2013.

    Set conn = Nothing     
End Sub

更新:

事实上,我发现连接关闭的时间太长了。

示例:

Sub test3()
    Dim conn As ADODB.Connection


    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\mydatabase.accdb"

    conn.Close ' Takes too long in Excel 2010, but runs instantinaly in Excel 2013.
    Set conn = Nothing
End Sub

有什么想法吗?

更新2:

我发现如果我保持连接打开至少15秒左右,关闭连接将不会花费时间..

所以我只是改变了我的项目,以便始终打开与数据库的连接。仅在退出Excel时,才会关闭连接。

0 个答案:

没有答案