之间有什么区别
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.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