You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:48:03