【问题标题】:Using With...End when opening recordsets in MsAccess using DAO使用 DAO 在 Ms Access 中打开记录集时使用 With...End
【发布时间】: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

【问题讨论】:

    标签: ms-access vba dao


    【解决方案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
    • 是的,那些变量声明并手动处理它们。或者也许这只是一个偏好问题?无论如何,谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多