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

时间:2016-04-19 17:11:58

标签: vba ms-access ado adodb recordset

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

Dim rs as adodb.recordset

在什么情况下我想使用New语句还是不使用它?对于上下文,我正在处理连接到SQL Server后端的ADODB访问应用程序。

1 个答案:

答案 0 :(得分:3)

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

对象变量在访问之前需要有一个引用,所以这个:

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

...将在运行时爆炸,错误#91 - "对象或With块变量未设置"。这条消息的重要部分是"未设置"。

当你这样做时:

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不是"设置"当访问c.Count时,你被咬了。

此代码的行为符合预期:

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