打开与功能的DB连接,使用单独的功能运行逻辑,然后关闭连接

时间:2018-01-16 14:17:34

标签: excel-vba database-connection ado vba excel

我想尝试将我的程序逻辑与我打开和关闭数据库连接的位置分开

我想在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范围消失。我是否打电话给第三个再次打开连接的功能,然后将其关闭?它是相同的连接还是只是不同连接的实例?

1 个答案:

答案 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过程,然后是逻辑过程,而不是我想要执行的,然后再次关闭过程。

相关问题