什么在一个记录rs.close VS RS =什么的区别

问题描述:

我常常觉得十分困惑何时是适当的使用方法:什么在一个记录rs.close VS RS =什么的区别

rs.Close 

反对

Set rs = Nothing 

我能理解需要关闭与源的连接,但是当变量超出范围时应该使用两者吗?

我可以将变量设置为Nothing以跳过关闭连接的步骤吗?这会被认为是一种不好的做法吗?

通过使用“关闭”方法,您正在关闭与数据库的连接,但仍然位于您可以使用“打开”方法再次打开的内存中。

另一方面将记录集设置为“Nothing”将完全从内存中释放对象。

+0

因此,没有做一个旁路需要做其他的? – 2010-03-30 02:39:09

+0

尽管您可以绕过将记录集设置为空,但不会发生任何错误。它只是在关闭它之后将recorset设置为无效的最佳实践,特别是当您对该记录集没有用处时,或者您不会再次访问相同的记录集时。 – 2010-03-31 00:35:50

+2

你的答案指的是数据库连接,但问题使用了记录集。数据库变量与其他变量不同,因为您可以安全地使用它们取决于它们的初始化方式(CurrentDB与DBEngine(0)(0))。使用记录集变量时,关闭记录集根本不会关闭数据库连接。 – 2010-04-02 17:19:17

Close方法撕下内存结构。

将变量设置为Nothing将清除指向该内存结构的指针。

理论上,清除指针应释放指针所指的内存,因为VBA使用引用计数来确定何时可释放内存。不幸的是,各种各样的事情可能会出错,引用计数可能会出现问题,并且即使应该出现内存也不会被释放。因此,为了确保您不会受到内存泄漏,或由隐式和未释放引用引起的奇怪类型的错误,您都关闭并设置为Nothing。

可以设置记录为Nothing而无需调用关闭,根据官方文件:

到关闭方法的替代方法是一个对象变量的值设置为Nothing(设置dbsTemp =无) 。

更多信息:Recordset.Close Method (DAO)