共享模块VBA之间的adodb连接

Posted

技术标签:

【中文标题】共享模块VBA之间的adodb连接【英文标题】:Share adodb Connection Between modules VBA 【发布时间】:2015-01-02 16:24:43 【问题描述】:

是否有一种基本方法可以在一个模块/表单中创建数据库连接,然后能够从另一个模块访问相同的数据库连接(保持打开状态)?

我有一个弹出请求 SQL 服务器的表单,然后从中收集数据库供用户选择。然后当我尝试使用连接时,它没有连接到另一个模块中声明的公共数据库?

这有意义吗?如果有,有什么办法吗?

Public conn As ADODB.Connection
Public Function openConnection(Optional DB As String)
Dim str As String
str = "Provider=SQLOLEDB;Server=" & Me.tbx_serverName.Text
If (Not IsEmpty(DB)) Then
str = str & ";Database=" & DB
End If
str = str & ";UID=" + tbx_dbuser.Text + " ;PWD=" + tbx_dbpass.Text + ";"

On Error Resume Next
    If conn Is Nothing Or conn.Status = 0 Then
      Set conn = New ADODB.Connection
      conn.Open str
    End If

If (conn.State = adStateOpen) Then
If (Not IsEmpty(DB)) Then
Me.lbl_connecteddb.Caption = "Connected to Database:" + DB
Else
Me.lbl_connecteddb.Caption = "Connected to Database:" + Me.ComboBox1.SelText
End If
Else
Me.lbl_connecteddb.Caption = "Error"
End If

End Function

这是我的开放连接功能,但我似乎无法(正确)访问另一个模块中的 conn, 即设置 rs = conn.execute("SELECT * FROM BLAH")

【问题讨论】:

【参考方案1】:

您应该可以声明。分配并打开一个ADODB.Connection,然后通过第二个 sub 的参数将其传递给另一个 sub。

sub Start_Here()
    Dim str As String, conn As ADODB.Connection

    str = "Provider=SQLOLEDB;Server=" & Me.tbx_serverName.Text
    If (Not IsEmpty(DB)) Then
        str = str & ";Database=" & DB
    End If
    str = str & ";UID=" + tbx_dbuser.Text + " ;PWD=" + tbx_dbpass.Text + ";"

On Error Resume Next
    If conn Is Nothing Or conn.Status = 0 Then
        Set conn = New ADODB.Connection
        conn.Open str
    End If

    Call Then_Here(conn)

    'remember to close conn before exit
end sub

sub Then_Here(next_conn As ADODB.Connection)
    debug.print next_conn.Status
    'use open next_conn here
end sub

【讨论】:

感谢您的帮助!我是否可以将子 Then_Here 放在不同的模块中,并且仍然可以调用它并通过连接? @Lacko - 听起来您需要对公共和私人订阅进行一些研究。 是的,刚刚意识到我问了什么!抱歉,感谢您的帮助!

以上是关于共享模块VBA之间的adodb连接的主要内容,如果未能解决你的问题,请参考以下文章

在 VBA 中对断开连接的 ADODB 记录集应用过滤器

VBA ADODB 查询返回 -1

在两个表上分组并在结果VBA ADODB SQL查询上执行左连接

VBA管理filezilla 之用户组及共享目录权限批量代码

Excel VBA - 搜索范围和连接的 SQL ADODB 记录集以在列中匹配写入结果集

在 node.js 中的客户端和服务器 js 文件之间共享 mysql 连接