【问题标题】: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 的连接,因为这会严重影响其他用户/服务的数据库性能。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        • 2012-04-30
        • 1970-01-01
        • 2010-09-29
        相关资源
        最近更新 更多