Vba &引用;rs.close“;和/或;设置rs=Nothing";

Vba &引用;rs.close“;和/或;设置rs=Nothing";,vba,ms-access,Vba,Ms Access,最佳做法问题: 问:在我的SUB结束时,我是否应该关闭打开的记录集&然后“Set rs=Nothing” 或者,仅仅“设置rs=Nothing”就足够了吗?(目前我有一个混合包) 人们倾向于将你正在做的事情称为“最佳实践”,但你可以绕过尊重所有最佳实践的封闭方法。从正式文件: Close方法的另一种选择是将对象变量的值设置为Nothing(set dbstep=Nothing)。 来源:答案是两者都不需要。它们是Access Basic留下的,Access 1.x和2.0的VBA的前身 在VBA

最佳做法问题:

问:在我的SUB结束时,我是否应该关闭打开的记录集&然后“Set rs=Nothing”

或者,仅仅“设置rs=Nothing”就足够了吗?(目前我有一个混合包)


人们倾向于将你正在做的事情称为“最佳实践”,但你可以绕过尊重所有最佳实践的封闭方法。从正式文件:

Close方法的另一种选择是将对象变量的值设置为Nothing(set dbstep=Nothing)。


来源:

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

在VBA中,垃圾收集器将为您清理它们

但是很多人——通常包括我在内——仍然使用它们来表示您不打算(打算)在函数的后面使用对象——实际上是Close方法


但请注意,第三方对象(如ActiveX组件和Excel)通常必须关闭并终止。这也说明了如何使用命令——使其成为编码时的一种习惯。

我同意
rs.Close.
如果不是rs,则设置rs=Nothing

请记住,关闭的记录集可能会重新打开(我在某些情况下使用它)。
关闭打开的所有内容也是一个很好的做法…垃圾收集器可能会完成任务…可能不会…

首先是
rs.close()
。第二,一个关闭对象,另一个从内存中释放对象。是的,谢谢你的澄清。我的转录错误。
Set EVERYTHING=Nothing
在每个
End子节点和
End函数都会自动执行,伏都教编程也是如此。以下是有关VBScript(复制VBA)的信息。@ACatInLove,您是否建议不明确要求“rs.close”或“set rs=nothing”?不,仅在结束子/函数之前将对象设置为nothing是巫毒编程,不起任何作用。它的起源实际上是一个非常古老的有bug的ADO版本。如果你按照我给你的链接中的链接,你会发现这些信息。剪贴式编程使伏都教的实践永久化。我还在研究中。一般的共识似乎表明,不需要“rs.close”或“Set rs=Nothing”,因为当垃圾收集和变量释放超出子文件末尾的范围时,可以处理它们(请参阅上面发布的链接)。我很快就会给出正确答案。马克,如果我在细节上打扰你,请原谅。我想指出的是(即,如果我的想法正确的话):我们假设你问“我需要提供多少匙咖啡粉才能用200毫升的水来制作我的饮料?”。为此,我回答你们:“两个满汤匙”。然后,在这个过程中,你发现你喜欢甜咖啡。恕我直言,你现在“还在研究”你需要多少糖才能做出好的饮料,但最初的问题是:“多少匙咖啡”。当然,你没有任何义务,但是,为了尊重你从一开始就放的东西的顺序,可能是编辑原始问题,或者接受我的答案,然后打开另一个问题,以确定糖的含量。另外,我想记住:这个平台stackoverflow及其所有功能都是完全免费的。谢谢你,并致以最良好的问候。
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