Cur*_*che 19 ms-access vba recordset
我经常发现它在何时适合使用时令人困惑:
rs.Close
Run Code Online (Sandbox Code Playgroud)
反对
Set rs = Nothing
Run Code Online (Sandbox Code Playgroud)
我可以理解需要关闭与源的连接,但是当变量超出范围时我是否应该同时使用它们?
我可以将变量设置为Nothing以跳过关闭连接的步骤吗?这会被认为是一种不好的做法吗?
Joj*_*dez 16
通过使用"关闭"方法,您将关闭与数据库的连接,但仍在内存中,您可以使用"打开"方法再次打开它.
另一方面,将记录集设置为"Nothing"会从内存中完全释放对象.
Dav*_*ton 11
该Close方法拆除了存储器结构.
设置变量以Nothing清除指向该内存结构的指针.
从理论上讲,清除指针应释放指针所指的内存,因为VBA使用引用计数来确定它何时可以释放内存.不幸的是,各种各样的事情可能会出错,并且引用计数最终可能会失败,并且即使应该存在也不会释放内存.
因此,为了确保您不会受到内存泄漏或由隐式和未发布引用引起的奇怪类型的错误,您Close和两者都设置为Nothing.
根据官方文档,您可以将Recordset设置为Nothing,而无需调用Close.
Close方法的替代方法是将对象变量的值设置为Nothing(Set dbsTemp = Nothing).