【问题标题】:Why and When do I use the New keyword when declaring a new recordset in Access VBA?为什么以及何时在 Access VBA 中声明新记录集时使用 New 关键字?
【发布时间】:2016-08-12 00:39:01
【问题描述】:

有什么区别

Dim rs as New adodb.recordset

Dim rs as adodb.recordset

在什么情况下我想使用或不使用 New 语句?就上下文而言,我正在开发一个连接到 SQL Server 后端的 ADODB 访问应用程序。

【问题讨论】:

标签: vba ms-access ado adodb recordset


【解决方案1】:

New 关键字创建一个对象的 new 实例,此处为 ADODB.Recordset 类型。

一个对象变量需要有一个引用才能被访问,所以这个:

Dim rs As ADODB.Recordset
rs.Open "SELECT * FROM TableName"

...将在运行时出现错误 #91 -“未设置对象或块变量”。该消息的重要部分是“未设置”。

当你这样做时:

Dim rs As New ADODB.Recordset

你真的在做:

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

Set 关键字用于为对象变量分配引用


特别是关于ADODB.Recordset,我想说你通常不想New 增加记录集。相反,您将得到一个参数化的ADODB.Command(例如,当命令运行SELECT 语句时,您将收到Recordset 结果)。


我建议不要在过程范围内使用As New 快捷方式。主要是因为这个:

Private Sub Test()
    Dim c As New Collection
    c.Add "Test"
    Set c = Nothing
    Debug.Print c.Count 'what happens here?
End Sub

如果你认为上面的代码因为在访问c.Count 时不再“设置”而导致c 崩溃,那么你就被咬了。

此代码按预期运行:

Private Sub Test()
    Dim c As Collection
    Set c = New Collection
    c.Add "Test"
    Set c = Nothing
    Debug.Print c.Count 'what happens here? that's right, boom!
End Sub

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 2011-06-25
    • 2017-01-16
    • 2017-04-14
    • 2010-09-16
    • 2016-10-12
    • 2023-03-06
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多