何时应该关闭记录集?

3

假设我将使用下面的子程序运行各种查询。每次都应该setcloserecordset吗?或者应该与我的连接(cn)一起只设置和关闭一次?如果我关闭了连接,是否需要关闭我的记录集?

Sub QueryPC(ByRef ReturnArray() As Variant, COB As Date, PC As Variant, FileCode As String)
    Dim srtQry As String, tmpArray() As Variant

    Set rs = CreateObject("ADODB.Recordset")

    srtQry = "whatever"

    Set rs = cn.Execute(srtQry)

    If Not rs.EOF Then
        tmpArray = rs.GetRows: TransposeArray tmpArray, ReturnArray
    Else
        ReDim ReturnArray(0)
    End If

    rs.Close

End Sub

1
记录集是特定于特定查询的,因此像您现在这样处理它是有意义的。 - Tim Williams
1个回答

1
关闭查询中的rs就像你的代码一样很好。更好的做法是你也应该这样处理你的Connection!
规则——已经有很多年了——是尽可能晚地打开连接,尽可能早地关闭连接。你显然将连接作为模块级别甚至更全局的变量:这是不良实践。你应该在使用它的地方创建并关闭它。
不太多的VBA示例这样做,可能是因为人们复制的VBA代码示例通常相当古老,或者因为写示例的人虽然擅长VBA但不是全职开发人员。
干杯!

哇!相当反直觉的!我真的以为逻辑是打开连接一次,执行所有查询,然后关闭它!我可以问一下为什么最好尽可能晚地打开并尽快关闭吗? - user2491612
1
基本原因是保持连接会在数据库服务器上使用资源。如果不这样做,您可以使用更小、更便宜的机器。干杯 - simon at rcl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接