在创建对象的新实例之前将 Object 设置为 Nothing?
Posted
技术标签:
【中文标题】在创建对象的新实例之前将 Object 设置为 Nothing?【英文标题】:Set Object to Nothing before creating a new instance of object? 【发布时间】:2015-04-23 18:03:57 【问题描述】:在 VBA 中,在声明对象的新实例之前将对象设置为 Nothing 是否是一种好习惯?
例如:
Private Sub SetupConn()
Const Provider As String = "sqloledb"
Const LanDataSource As String = "127.0.0.1"
Const WanDataSource As String = "mail.12345678.biz:12345"
Dim UserName As String
Dim Password As String
UserName = "myusername"
Password = "mypassword"
这是我想知道是否应该关闭 连接或在重新打开新连接之前将其设置为空。
Set mDBconn = New ADODB.Connection
Select Case mConnMethod
Case WAN
mConnStr = "Provider='" & Provider & ";Data Source=" & WanDataSource _
& ";User ID=" & UserName & ";Password=" & Password
Case Lan
mConnStr = "Provider='" & Provider & ";Data Source=" & LanDataSource _
& ";User ID=" & UserName & ";Password=" & Password
End Select
End Sub
场景是用户在路上,使用移动数据连接,他到达办公室,想要直接进入高速 wifi 连接,而无需关闭和重新打开程序。在这种情况下,我要做的是将连接方法设置为 LAN 并使用重置参数调用此子。
【问题讨论】:
在 VBA 中不确定,但如果您使用新引用设置变量,旧的引用将被覆盖并被垃圾收集器捕获,因为不再使用。 这也是我将其标记为 ADODB 的部分原因,我不知道在不关闭它的情况下将对象设置为空是否有任何危害。 那么,最好等待更了解adodb模型的人。我知道以上内容,但我不确定,所以不想传播错误的信息。暂时小心。 Is there a need to set Objects to Nothing inside VBA Functions 的可能重复项。 我想我的部分问题是关于这与关闭 ADODB 连接有何关系。 【参考方案1】:我猜根据这个Whats the difference between rs.close vs rs = nothing in a RecordSet, 关闭和设置任何内容都很好。这回答了我的问题。
【讨论】:
以上是关于在创建对象的新实例之前将 Object 设置为 Nothing?的主要内容,如果未能解决你的问题,请参考以下文章
在刷新之前保存瞬态实例,或者将属性的级联操作设置为使其自动保存的内容