代码之家  ›  专栏  ›  技术社区  ›  Alfa Bravo

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

  •  0
  • Alfa Bravo  · 技术社区  · 7 年前

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

    我想在excel中打开与Access数据库的DB连接,该功能可以在每次需要时重复使用以打开连接。然后,我想运行连接打开后需要运行的逻辑(包括单个示例)。

    到目前为止,我的代码完成了所有这些,但在运行完我的逻辑之后,我想关闭连接。我的问题是知道如何正确地关闭连接。

    到目前为止,我有以下几项工作:打开连接并返回记录

    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公司 范围已消失。我是否调用了第三个函数来再次打开并关闭连接?它是相同的连接还是只是不同连接的一个实例?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Alfa Bravo    7 年前

    最后,我做了以下工作,效果很好:

    在my DB模块中: 声明了全局变量-

    Dim conn As New ADODB.Connection
    

    然后是我的open sub-

    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
    

    我的关闭sub

    Public Sub closeDB()
        conn.Close
    End Sub
    

    现在在任何模块中,我只调用open过程,然后调用我想要执行的逻辑过程,然后再次调用close过程。