如何在 Excel 中的 VBA 中使 ADODB.Connection 持久化?

Mat*_*ory 5 sql excel vba persistent

我有一个 Excel 电子表格,需要显示来自我们 SQL 数据库的数据。

我将慢查询的结果存储在临时表中,并希望能够重复访问这些结果而不必重新运行慢查询。

我在 VBA 中使用 ADODB.Connection 连接到我们的 SQL 数据库并检索信息。只要用户使用电子表格,我想打开一次连接并在各种宏中使用该会话。我找不到任何方法使连接持久化,因此一旦我退出打开它的宏,它就会始终关闭,并且丢失了我创建的所有临时表。

Kev*_*ope 5

Daz Lewis 是完全正确的,您不应该无限期地保持数据库连接打开。但是,如果这是一个本地数据库并且您是唯一使用它的数据库,那么您应该可以随时保持打开状态。

将此添加为保存代码的模块的第一行:

Global dbConnPublic As ADODB.Connection
Run Code Online (Sandbox Code Playgroud)

在“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
Run Code Online (Sandbox Code Playgroud)

这将在打开工作簿时打开数据库连接,并在关闭工作簿时关闭它。请记住,您可能需要检查以确保连接在您需要使用时仍处于打开状态,因为如果连接时间过长,它可能会被服务器关闭。


Dar*_*wis 4

当宏完成并因此关闭时,您的连接将超出范围。您不希望对 SQL Server 无限期地保持打开连接,因为这可能会严重影响其他用户/服务的数据库性能。

您在临时表中存储的数据有多大?如果不是太大,您可以将其放在本地。为了防止宏完成时这些数据也超出范围,您需要将其存储在模块级变量中而不是宏内。是的,您也可以在此处存储您的连接,但我强烈建议您不要这样做。