VBA ODBC更新
问题描述:
这是我使用更新的SQL数据库的代码:VBA ODBC更新
Public Sub main()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
cnn.Open "ConnectionName"
rst.ActiveConnection = cnn
rst.CursorLocation = adUseServer
rst.Source = "Update Table ..."
rst.Open
Set rst = Nothing
Set cnn = Nothing
End Sub
我想知道的是,如果我要如何打开它后处理的第一个对象。我会关闭它吗?当我尝试rst.Close时,出现错误:“当对象关闭时不允许操作”。代码工作正常,没有rst.Close,我想知道是否有任何危险不关闭对象。
答
一个UPDATE
操作不返回结果集。因此,如果使用Recordset
对象执行,则会产生空的和关闭的记录集。无论如何都不能关闭它,因为它从未打开。
的经验法则是:
if rst.State <> adStateClosed then rst.Close
但是,因为你执行这不会反正返回数据的命令时,首选方法是:
dim cm as ADODB.Command
set cm = new adodb.command
set cm.activeconnection = cnn
cm.commandtype = adCmdText
cm.commandtext = "UPDATE ..."
cm.execute ,, adExecuteNoRecords
或者,如果你的SQL是没有参数的固定字符串,
cnn.execute "UPDATE ...",, adExecuteNoRecords
此外,请将rst.ActiveConnection = cnn
更改为Set rst.ActiveConnection = cnn
。
答
更新不会返回任何行,因此不需要打开记录集。
您可以直接执行使用语句:
Connection.Execute "Update Table ...", [flags]
要回答你的问题,记录关闭.Open
后(其.state
会adStateClosed
)因为没有数据已经返回,所以将其设置为没有什么是足够的。