2010-10-22 82 views
0

在MS-Access窗体,我附上下面的代码的事件:MS Access:.RecordSetClone后需要关闭吗?

Dim frm As Form, rs As Recordset 
Set rs = Me.RecordsetClone 

'do some stuff with rs 
' 
rs.Close 
Set rs = Nothing 
Set frm = Nothing 

我的问题是:需要对rs.Close?它是否甚至是好的(不希望的副作用?)

+2

您应该将您的记录集变量定义为rs作为DAO.Recordset。也就是说,如果你打算宣布它。在使用RecordsetClone时,几乎从不会有这种情况。相反,使用WITH/END WITH块,即'With Me.RecordsetClone'。 – 2010-10-23 01:21:22

+0

@David:With是个好主意。我从来没有指定DAO部分,因为我从来没有引用ADO,但是你可能是对的,有一天我会付出代价的: -/ – 2010-10-23 15:48:05

+0

通过指定它,使得编译过程需要更少的隐式对象命名空间。虽然我从来没有见过VBA只有DAO引用才会错,但我宁愿告诉VBA看什么,所以它不必“担心”它。它也只是更好的编码 - 请记住,代码的目的之一是通知程序员发生了什么事情(不仅仅是编译器),并且在所有情况下指定DAO都会使其清楚。 – 2010-10-24 02:38:26

回答

1

不,不需要关闭,简单的规则是如果你的代码没有打开reocrdset,那么你不想关闭它。所以,你只需要/需要关闭你打开的东西。

因此,您正在使用现有的内置记录集,并且未打开该记录集。将这两者都设置为无,因为它不是必需的,但它可以保持原样,并且清楚地表明您对该对象所做的意图。

1

我不认为世界会结束,但总是关闭你打开的东西。

访问曾经有一个问题,如果你没有处理某个对象,它不会退出,但它将最小化任务栏,你将不得不杀死任务。然而,当你将对象设置为空时,这不会影响你

+0

我的问题是我们在这里谈论的是一个*克隆*,我将它理解为指向另一个预先存在的对象的指针。 – 2010-10-22 09:55:05

+0

但他没有打开它 - 表单的RecordsetClone已经存在。 – 2010-10-23 01:19:56