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

Sql 如何使ADODB.Connection在Excel中的VBA中持久化?,sql,excel,vba,persistent,Sql,Excel,Vba,Persistent,我有一个Excel电子表格,需要显示SQL数据库中的数据 我将慢速查询的结果存储在一个临时表中,希望能够重复访问这些结果,而无需重新运行慢速查询 我使用VBA中的ADODB.Connection连接到SQL数据库并检索信息。只要用户使用电子表格,我想打开一次连接,并在各种宏之间使用该会话。我找不到任何方法使连接持久化,因此一旦我退出打开连接的宏,它总是会关闭,并且我会丢失我创建的所有临时表。宏完成后,您的连接将超出范围,因此会关闭。您不希望针对SQL Server无限期地保持连接打开,因为这会严

我有一个Excel电子表格,需要显示SQL数据库中的数据

我将慢速查询的结果存储在一个临时表中,希望能够重复访问这些结果,而无需重新运行慢速查询


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

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


临时表中存储的数据有多大?如果不是太大,你可以在本地持有。为了防止宏完成时该数据也超出范围,需要将其存储在模块级变量中,而不是宏中。是的,您也可以将连接存储在这里,但我强烈建议您不要。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