什么是记录集中rs.close vs rs = nothing之间的区别

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"会从内存中完全释放对象.

  • 您的答案是指数据库连接,但问题是使用记录集.数据库变量与其他变量不同,因为您可以安全地使用它们取决于它们的初始化方式(CurrentDB与DBEngine(0)(0)).使用记录集变量,关闭记录集根本不会关闭数据库连接. (3认同)

Dav*_*ton 11

Close方法拆除了存储器结构.

设置变量以Nothing清除指向该内存结构的指针.

从理论上讲,清除指针应释放指针所指的内存,因为VBA使用引用计数来确定它何时可以释放内存.不幸的是,各种各样的事情可能会出错,并且引用计数最终可能会失败,并且即使应该存在也不会释放内存.

因此,为了确保您不会受到内存泄漏或由隐式和未发布引用引起的奇怪类型的错误,您Close和两者都设置为Nothing.


jur*_*rev 5

根据官方文档,您可以将Recordset设置为Nothing,而无需调用Close.

Close方法的替代方法是将对象变量的值设置为Nothing(Set dbsTemp = Nothing).

更多信息:Recordset.Close方法(DAO)