我想尝试将我的程序逻辑与我打开和关闭数据库连接的位置分开
我想在excel中打开一个数据库连接到一个Access数据库,我可以在每次需要时重复使用它来打开连接。然后我想运行连接打开后需要运行的逻辑(包括单个示例)。
到目前为止,我的代码完成了所有这些操作,但在运行逻辑之后,我想关闭连接。我的问题是知道如何正确关闭连接。
到目前为止,我有以下工作:打开连接和返回记录
Private Function returnRecordSetFromDB(qry As String) As ADODB.recordSet
Dim rst As New ADODB.recordSet
Dim conn As New ADODB.Connection
strcon = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\SomeFolder\SomeDB.accdb;"
conn.Open (strcon)
rst.Open qry, conn, adOpenStatic
Set returnRecordSetFromDB = rst
'I should close "rst" here, but then I can not use the data in my logic function anymore
End Function
执行我需要对记录数据执行逻辑的函数:
Private Sub populateTrucks()
Dim qry As String
Dim returnedRecordSet As ADODB.recordSet
qry = "SELECT [Trucks] FROM tbl_trucks ORDER BY [Trucks];"
Set returnedRecordSet = returnRecordSetFromDB(qry)
returnedRecordSet.MoveFirst
With Me.cmb_trucks
.Clear
Do
.AddItem returnedRecordSet![Trucks]
returnedRecordSet.MoveNext
Loop Until returnedRecordSet.EOF
End With
Me.cmb_trucks.ListIndex = 0
returnedRecordSet.Close
Set returnedRecordSet = Nothing
End Sub
据我所知,我的openDB函数中的rst
仍然打开,因为我无法关闭它,否则我无法使用我的记录数据,但是如何关闭呢?我无法在逻辑函数中关闭它,导致rst
范围消失。我是否打电话给第三个再次打开连接的功能,然后将其关闭?它是相同的连接还是只是不同连接的实例?
答案 0 :(得分:0)
最后,我做了以下工作正常:
在我的数据库模块中: 声明了一个全局变量 -
Dim conn As New ADODB.Connection
然后我的开放子
Public Function openDB()
strcon = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Users\MRProgrammeringPC\Dropbox\Programming\Meatrite Programme\MRPractise.accdb;"
conn.Open (strcon)
End Function
我的逻辑功能
Public Function returnRecordSetFromDB(qry As String) As ADODB.Recordset
rst.Open qry, conn, adOpenStatic
Set returnRecordSetFromDB = rst
End Function
我的近距离
Public Sub closeDB()
conn.Close
End Sub
现在在任何模块中我只调用open过程,然后是逻辑过程,而不是我想要执行的,然后再次关闭过程。