Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA ADODB连接关闭时间过长-Excel 2010_Vba_Excel_Adodb_Ms Access 2013 - Fatal编程技术网

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

VBA ADODB连接关闭时间过长-Excel 2010,vba,excel,adodb,ms-access-2013,Vba,Excel,Adodb,Ms Access 2013,我正在使用ADODB连接从Access 2013数据库获取数据并在Excel中显示。我使用Excel 2013在VBA中成功开发了一个高效的项目(时间方面) 然而,当我试图在Excel2010中执行我的excel应用程序时,某些操作的性能明显下降 我设法发现,Excel2010中性能不足的原因是Excel2010从内存中释放数据库连接所需的时间 下面,我提供了两个在Excel 2010中运行缓慢但在Excel 2013中运行缓慢的代码示例 我将变量设置为Nothing,只是为了确认释放这些变量花

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

然而,当我试图在Excel2010中执行我的excel应用程序时,某些操作的性能明显下降

我设法发现,Excel2010中性能不足的原因是Excel2010从内存中释放数据库连接所需的时间

下面,我提供了两个在Excel 2010中运行缓慢但在Excel 2013中运行缓慢的代码示例

我将变量设置为Nothing,只是为了确认释放这些变量花费的时间太长。如果我不将它们设置为Nothing,问题仍然存在,因为当这些变量超出范围时,它们会自动释放(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 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 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时,连接才会关闭