点击VBA弹窗Yes按钮后如何更新SQL Server数据表
故障原因
- 子过程逻辑错误:你在
connect_to_sqlserver过程中强行覆盖了传入的SQL_Statement参数,重写SQL时调用的test、VID都是test过程的局部变量,在连接过程中无有效值,最终生成的SQL语句完全无效。 - 未执行SQL操作:仅完成了数据库连接打开操作,没有调用ADO连接对象的
Execute方法执行更新语句,数据变更请求根本没有提交到SQL Server。
完整修正代码
运行前请确保已经在VBA编辑器的「工具-引用」中勾选了Microsoft ActiveX Data Objects x.x Library,否则会报ADODB相关类型未定义的错误。
Option Explicit ' 按钮点击触发逻辑 Sub Button2_Click() Dim ans As VbMsgBoxResult ans = MsgBox("Upload?", vbQuestion + vbYesNo, "Upload Student") If ans = vbYes Then Call UpdateSQLTable MsgBox "更新完成" End If End Sub ' 核心SQL更新逻辑 Sub UpdateSQLTable() Dim cnn As ADODB.Connection Dim cnnStr As String Dim uSQL As String Dim wb As Workbook Dim ws As Worksheet Dim VID As String ' 初始化对象、读取Excel数据 Set cnn = New ADODB.Connection Set wb = ThisWorkbook Set ws = wb.Sheets("Calculator") VID = ws.Cells(3, 2).Value ' 明确读取单元格的值 ' 拼接数据库连接字符串 cnnStr = "Provider=SQLOLEDB; " & _ "Data Source=CONFIDENTIAL; " & _ "Initial Catalog=CONFIDENTIAL;" & _ "User ID=CONFIDENTIAL;" & _ "Password=CONFIDENTIAL;" & _ "Trusted_Connection=No" ' 连接数据库并执行更新 cnn.Open cnnStr uSQL = "UPDATE table_name SET APP_VERSION_STATUS = 'Ready For Approval' WHERE APPLICATION_VERSION_ID IN (" & VID & ")" Debug.Print uSQL ' 调试用,可在立即窗口校验生成的SQL是否正确 cnn.Execute uSQL ' 核心:提交SQL语句到SQL Server执行 ' 释放资源 cnn.Close Set cnn = Nothing End Sub
内容的提问来源于stack exchange,提问作者bgado
相关产品推荐
相关产品推荐

