从 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 在 SQL Server 中上传 Excel 文件数据