从Excel VBA更新SQL Server表

从Excel VBA更新SQL Server表,vba,excel,Vba,Excel,我正在尝试使用下面的代码获取活动单元格并更新SQL Server中的表 Sub UpdateTable() Dim rngName As Range cnnstr = "Provider=SQLOLEDB; " & _ "Data Source=MyServer; " & _ "Initial Catalog=Mydb;" & _ "User ID=User;" & _

我正在尝试使用下面的代码获取活动单元格并更新SQL Server中的表

Sub UpdateTable()
Dim rngName As Range
cnnstr = "Provider=SQLOLEDB; " & _
            "Data Source=MyServer; " & _
            "Initial Catalog=Mydb;" & _
            "User ID=User;" & _
            "Password=Pwd;" & _
            "Trusted_Connection=No"
Set rngName = ActiveCell
'Debug.Print (rngName)
 Set cnn = New ADODB.Connection
Application.ScreenUpdating = False
cnn.Open cnnstr
Set rs = New ADODB.Recordset
uSQL = "UPDATE MyTable SET FieldNameX = 1 WHERE FieldNameY = '" & rngName & "' "
rs.CursorLocation = adUseClient
rs.Open uSQL, cnn, adOpenStatic, adLockOptimistic, adCmdText
rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing
Exit Sub
End Sub
当单步执行代码时,会在rs.close行上显示运行时错误,表示对象关闭时不允许执行
操作
我已在代码中设置并打开了记录集,为什么要关闭它


我需要做些什么来纠正这个问题,让活动单元格填充查询并更新SQL Server中的表?

下面是我用来更新SQL Server中的表的代码,这正是我想要的。它接受activecell并进行更新

Sub UpdateTable()
Dim cnn As ADODB.Connection
Dim uSQL As String
Dim rngName As Range
Set cnn = New Connection
cnnstr = "Provider=SQLOLEDB; " & _
            "Data Source=MyServer; " & _
            "Initial Catalog=Mydb;" & _
            "User ID=User;" & _
            "Password=Pwd;" & _
            "Trusted_Connection=No"
    Set rngName = ActiveCell
cnn.Open cnnstr
uSQL = "UPDATE MyTable SET FieldNameX = 1 WHERE FieldNameY= '" & rngName & "' "
'Debug.Print (uSQL)
cnn.Execute uSQL
cnn.Close
Set cnn = Nothing
Exit Sub
End Sub

您能否确认记录集
rs
已成功打开?在即时窗口中尝试
?rs.recordcount
(使用CTRL\G)。如果错误发生在行“rs.Open”上,则该上下文可能未打开。我应该将行rs.recordcount放在哪里?我把它放在我的rs.open行之后,它的运行时错误带有错误数量的参数或无效的属性分配您的更新SQL不会返回任何记录,因此您希望记录集为空。对于更新,最好使用
连接。执行
方法-有一个参数
RecordsAffected
可用于确定受更新影响的行数。为什么说我的更新SQL不返回任何记录,当我在即时窗口中执行Debug.Print(uSQL)时,它会发布SQL,我已经在SSMS中对此进行了测试,它会更新记录。总是只有一条记录需要更新,那就是excel中的活动单元格。我从SQL Server导入数据,更新查询将记录为从表中下载的数据。您的更新不会返回任何记录:它所做的只是更新表。这不会导致选择任何记录并填充记录集。