代码之家  ›  专栏  ›  技术社区  ›  Curtis Inderwiesche

在一个记录集中rs.close和rs=nothing有什么区别

  •  17
  • Curtis Inderwiesche  · 技术社区  · 16 年前

    rs.Close 
    

    反对

    Set rs = Nothing
    

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

    4 回复  |  直到 16 年前
        1
  •  16
  •   Jojo Sardez    16 年前

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

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

        2
  •  14
  •   Francesco B. PahJoker    8 年前

    这个 Close 方法会破坏记忆结构。

    Nothing 清除指向该内存结构的指针。

    理论上,清除指针应该释放指针所引用的内存,因为VBA使用引用计数来确定何时可以释放内存。不幸的是,各种各样的事情都可能出错,引用计数最终可能会出错,内存甚至在应该释放的时候也不会被释放。

    因此,为了确保您不会受到内存泄漏或由隐式引用和未释放引用引起的奇怪类型的错误的影响,您和 并设置为 没有什么 .

        3
  •  7
  •   jurev    11 年前

    根据官方文档,您可以将记录集设置为Nothing,而无需调用Close:

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

        4
  •  1
  •   Elletlar FireTr3e    7 年前

    1. RS在B中声明,并且是B的返回值之一,供A使用

    B中的RS只应设置为nothing而不关闭它,否则返回到A(或作为A中的参数之一发送到B)的记录集对象也将被关闭并设置为nothing,使其在A中不可访问,即使您事先将RS返回到A然后在B中关闭!