共享模块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 SQL查询上执行左连接
VBA管理filezilla 之用户组及共享目录权限批量代码