从 Excel VBA 更新 SQL Server 表

Posted

技术标签:

【中文标题】从 Excel VBA 更新 SQL Server 表【英文标题】:Update SQL Server table from Excel VBA 【发布时间】:2014-03-06 16:06:27 【问题描述】:

我正在尝试使用以下代码获取活动单元格并更新 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 行运行时出错,说 Operation is not allowed when the object is closed 我已经在代码中设置并打开了记录集,为什么要关闭它?

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

【问题讨论】:

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

下面是我用来在 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

【讨论】:

以上是关于从 Excel VBA 更新 SQL Server 表的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 将 Excel 表连接到 SQL Server

VBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表

VBA Excel ADO SQL 更新查询不起作用

使用 VBA 在 SQL Server 中上传 Excel 文件数据

使用 VBA 将 Excel 数据导入 SQL Server 表

Excel VBA 连接各种数据库 VBA连接SQL Server数据库