使用 DAO 在 Ms Access 中打开记录集时使用 With...End
Posted
技术标签:
【中文标题】使用 DAO 在 Ms Access 中打开记录集时使用 With...End【英文标题】:Using With...End when opening recordsets in MsAccess using DAO 【发布时间】:2016-02-10 20:55:25 【问题描述】:根据answer,当变量超出范围时,VB 将自动释放对象的资源。问题:如果我在打开 DAO.Recordset 时使用 With...End
是否可以,因为当 Sub
超出范围时应该清理资源,或者我是否仍然需要显式 Close
并将对象设置为Nothing
?
例如,
Sub Test()
With CurrentDb.OpenRecordset("SELECT * FROM Table1", dbOpenForwardOnly)
IsThisAGoodPractice()
End With
End Sub
【问题讨论】:
【参考方案1】:我是否还需要明确地
Close
并将对象设置为Nothing
?
在With
块内,您没有引用记录集的对象变量,因此无法设置它= Nothing
。在End With
之后,记录集消失了,所以你也不能在那里设置= Nothing
--- 但它已经消失了,所以这毫无意义。
关于它的.Close
方法,我认为它与包含.Close
方法的任何对象相同。但是无论你是否调用它,VBA 仍然会在End With
处处理记录集。
【讨论】:
@HandsUp 请进一步澄清,有人告诉我,在打开 DAO 记录集时使用 With...End 不是一个好习惯,我仍然应该声明对象变量并手动处理它。对我来说,使用 With..End 要简单得多。我错了吗? 我不明白With CurrentDb.OpenRecordset(...
比Set rs = CurrentDb.OpenRecordset(...
简单得多是不是你的储蓄只是避免Dim rs As DAO.Recordset
?
是的,那些变量声明并手动处理它们。或者也许这只是一个偏好问题?无论如何,谢谢你的回答!以上是关于使用 DAO 在 Ms Access 中打开记录集时使用 With...End的主要内容,如果未能解决你的问题,请参考以下文章
VB6、MS Access、DAO - 显示列名不为空的所有记录