“rs.close”和/或“Set rs = Nothing”

时间:2017-12-29 01:34:20

标签: access-vba

最佳实践问题:

问:在我的Subs结束时,我是否应该关闭打开的Recordset&然后“设置rs = Nothing”。

或者,“Set rs = Nothing”是否足够? (我现在有一个混合包)

Private Sub btnSave_Click()

    Dim db As Database
    Dim rs As DAO.Recordset

    Set db = CurrentDb
    Set rs = db.OpenRecordset("Desc_Mfg_Norm", dbOpenTable)

    'do stuff

Exit:

    rs.Close
    Set rs = Nothing
    Set db = Nothing

exit sub

3 个答案:

答案 0 :(得分:3)

答案是两者都不需要。它们是 Access Basic 的遗留物, Access 1.x 2.0 的VBA的前身。

在VBA中,垃圾收集器会为你清理它们。

但许多人 - 通常包括我 - 仍然使用它们来表示你不打算(打算)稍后在函数中使用该对象 - 实际上是Close方法。

请注意,第三方对象 - 如ActiveX组件,例如Excel - 通常必须关闭并终止。这也说明了使用命令 - 在编码时养成习惯。

答案 1 :(得分:1)

人们倾向于将您正在做的事情称为"最佳做法",但您可以绕过尊重所有最佳做法的关闭方法。来自官方文件:

An alternative to the Close method is to set the value of an object variable to Nothing (Set dbsTemp = Nothing).

来源:https://msdn.microsoft.com/en-us/library/office/ff836011.aspx

答案 2 :(得分:0)

我去解决
     rs.Close。
     如果Not rs为Nothing,则设置rs = Nothing。

请记住,关闭的Recordset可能会重新打开(我有时会用它)。 关闭您打开的所有内容也是一种好习惯...垃圾收集器可能会完成工作...可能不会......