为什么以及何时在 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.Count
时 c
不再是 "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
和
有什么区别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.Count
时 c
不再是 "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