用函数打开数据库连接,运行逻辑用单独的函数然后关闭连接
Opening DB connection with function, run logic with separate function and then close connection
我想尝试将程序逻辑与打开和关闭数据库连接的位置分开
我想在 excel 中打开一个到 Access 数据库的数据库连接,我可以在每次需要时重新使用它来打开连接。然后,一旦连接打开(包括单个示例),我想 运行 我需要 运行 的任何逻辑。
到目前为止,我的代码完成了所有这些工作,但在 运行我的逻辑之后,我想关闭连接。我的问题是知道如何正确关闭连接。
到目前为止,我有以下工作:打开连接和 RETURN 记录
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
按照我的说法,rst
在我的openDB函数中是打开的,因为我无法关闭它,否则我无法使用我的记录数据,但我现在如何关闭它?我无法在我的逻辑函数中关闭它,因为 rst
范围已经消失。我是否调用第三个函数再次打开连接,然后关闭它?它是相同的连接还是只是不同连接的一个实例?
最后我做了以下工作正常:
在我的数据库模块中:
声明了一个全局变量 -
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
现在在任何模块中,我只需调用打开过程,然后调用我想要执行的逻辑过程,然后再次调用关闭过程。
我想尝试将程序逻辑与打开和关闭数据库连接的位置分开
我想在 excel 中打开一个到 Access 数据库的数据库连接,我可以在每次需要时重新使用它来打开连接。然后,一旦连接打开(包括单个示例),我想 运行 我需要 运行 的任何逻辑。
到目前为止,我的代码完成了所有这些工作,但在 运行我的逻辑之后,我想关闭连接。我的问题是知道如何正确关闭连接。
到目前为止,我有以下工作:打开连接和 RETURN 记录
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
按照我的说法,rst
在我的openDB函数中是打开的,因为我无法关闭它,否则我无法使用我的记录数据,但我现在如何关闭它?我无法在我的逻辑函数中关闭它,因为 rst
范围已经消失。我是否调用第三个函数再次打开连接,然后关闭它?它是相同的连接还是只是不同连接的一个实例?
最后我做了以下工作正常:
在我的数据库模块中: 声明了一个全局变量 -
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
现在在任何模块中,我只需调用打开过程,然后调用我想要执行的逻辑过程,然后再次调用关闭过程。