使用 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的主要内容,如果未能解决你的问题,请参考以下文章

MS Access DAO 连接在退出时放弃更改

VB6、MS Access、DAO - 显示列名不为空的所有记录

MS Access ADP 断开连接的记录集恢复

使用事务的 DAO 记录集批量更新(excel)

如何从 ADO 记录集字段将图片加载到 MS-Access Image 控件中?

MS Access ADO 记录集和二维数组