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



之间有什么区别

Dim rs as New adodb.recordset

Dim rs as adodb.recordset

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

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

对象变量在被访问之前需要有一个引用,因此:

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

将在运行时出现错误#91-"Object or with block variable not set"。这里的信息的重要部分是"未设置"。

当你这样做:

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.Countc不再"设置"而爆炸的,那么你就被咬了。

此代码的行为与预期一致:

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