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后(其.stateadStateClosed)因为没有数据已经​​返回,所以将其设置为没有什么是足够的。