为什么以及何时在 Access VBA 中声明新记录集时使用 New 关键字?

Why and When do I use the New keyword when declaring a new recordset in Access VBA?

有什么区别
Dim rs as New adodb.recordset

Dim rs as adodb.recordset

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

New 关键字创建对象的 new 实例,这里的类型为 ADODB.Recordset.

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

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

...将在 运行 时爆炸并出现错误 #91 - "Object or With block variable not set"。该消息的重要部分是 "not set".

当你这样做时:

Dim rs As New ADODB.Recordset

你真的在做:

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

Set 关键字用于将引用 分配给对象变量。


特别是关于 ADODB.Recordset,我会说您 通常 不想 New 建立记录集。相反,您将 get 通过 运行 参数化 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.Countc 不再是 "set" 而崩溃,那你就中招了。

此代码按预期运行:

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