用函数打开数据库连接,运行逻辑用单独的函数然后关闭连接

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

现在在任何模块中,我只需调用打开过程,然后调用我想要执行的逻辑过程,然后再次调用关闭过程。