【问题标题】:How do I make an ADODB.Connection Persistent in VBA in Excel?如何在 Excel 的 VBA 中使 ADODB.Connection 持久化?
【发布时间】:2011-10-02 07:43:23
【问题描述】:
我有一个 Excel 电子表格,需要显示我们 SQL 数据库中的数据。
我将慢速查询的结果存储在一个临时表中,并希望能够重复访问这些结果而不必重新运行慢速查询。
我在 VBA 中使用 ADODB.Connection 连接到我们的 SQL 数据库并检索信息。只要用户使用电子表格,我想打开一次连接并在各种宏中使用该会话。我找不到任何方法使连接持久,所以一旦我退出打开它的宏并且我丢失了我创建的任何临时表,它总是会关闭。
【问题讨论】:
标签:
sql
excel
vba
persistent
【解决方案1】:
Daz Lewis 完全正确,您不应该无限期地保持数据库连接打开。但是,如果这是一个本地数据库并且您是唯一使用它的人,那么您应该可以将其保持打开状态,只要您愿意。
将此添加为包含您的代码的模块的顶行:
Global dbConnPublic As ADODB.Connection
在“ThisWorkbook”对象中:
Private Sub Workbook_Open()
Set dbConnPublic = openDBConn() 'Or whatever your DB connection function is called'
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
dbConnPublic.Close
End Sub
这将在打开工作簿时打开数据库连接,并在关闭工作簿时关闭它。请记住,当您需要使用它时,您可能需要检查以确保连接仍然处于打开状态,因为如果它打开时间过长,它可能会被服务器关闭。
【解决方案2】:
当宏完成并因此关闭时,您的连接将超出范围。您不希望无限期地打开与 SQL Server 的连接,因为这会严重影响其他用户/服务的数据库性能。
您在临时表中存储的数据有多大?如果它不是太大,你可以在本地保存它。为防止此数据在宏完成时也超出范围,您需要将其存储在模块级变量中,而不是宏中。是的,您也可以在此处存储您的连接,但我强烈建议您不要这样做。