我使用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时,才会关闭连接。