我经常发现在何时适合使用时会感到困惑:
rs.Close
反对
Set rs = Nothing
我可以理解需要关闭与源的连接,但是当变量超出范围时我应该同时使用它们吗?
我可以将变量设置为Nothing以跳过关闭连接的步骤吗?这会被认为是一种不好的做法吗?
答案 0 :(得分:16)
通过使用“关闭”方法,您将关闭与数据库的连接,但仍在内存中,您可以使用“打开”方法再次打开它。
另一方面,将记录集设置为“Nothing”会从内存中完全释放该对象。
答案 1 :(得分:11)
Close
方法摧毁了内存结构。
将变量设置为Nothing
会清除指向该内存结构的指针。
理论上,清除指针应释放指针所指的内存,因为VBA使用引用计数来确定它何时可以释放内存。不幸的是,各种各样的事情都可能出错,并且引用计数最终可能会失败,即使应该存在,内存也不会被释放。
因此,为了确保您不会受到内存泄漏或由隐式和未发布引用引起的奇怪错误,您Close
并设置为Nothing
。
答案 2 :(得分:5)
根据官方文档:
,您可以将Recordset设置为Nothing,而无需调用CloseClose方法的替代方法是将对象变量的值设置为Nothing(Set dbsTemp = Nothing)。
答案 3 :(得分:0)
根据我的经验,如果重新定义的对象(以下称为“ RS”)是在本地(在函数/过程中,以下称为“ B”)声明的,则不会传递到B所在的位置是安全的,建议关闭RS并将其设置为B内的任何内容;但在以下情况下:
B中的RS仅应在不关闭的情况下设置为空,否则返回给A(或作为A的一个参数发送到B的记录集)的对象也将被关闭并且不进行任何设置,从而使其无法访问A,即使您预先将RS返回A,然后在B中关闭!