【问题标题】:Checkbox Yes/No Change on Dropbox Change复选框 Yes/No Change on Dropbox Change
【发布时间】:2019-10-14 02:11:23
【问题描述】:

我有一个组合框 (cbo1),其中列出了可用的项目。当我在cbo1 中选择一个项目时,我希望它将复选框更改为 True(或 Yes)。

cbo1tblLOG 获取数据,其中 Box(复选框)为 NO Query

我尝试过使用

UPDATE tblLOG 
Set Box = True
WHERE Serial = cboSerial

实际代码。

Private Sub cbo1_Change()
    Dim strSQL As String
    Dim i As Integer
    Dim Msg As String
    Dim Assm As String

    Assm = cbo1.Value

    'Exit this sub if the combo box is cleared
    Msg = "Make Update" & vbCr & vbCr

    i = MsgBox(Msg, vbQuestion + vbYesNo, "UPDATE VALUE?")
    If i = vbYes Then
        strSQL = "UPDATE tblLOG " _
        & "SET Box= True " _
        & "WHERE Serial = Assm;"
        CurrentDb.Execute strSQL, dbFailOnError
        Response = acDataErrAdded
    End If
End Sub

我的结果是

运行时错误“3061”:参数太少。预计 1。

【问题讨论】:

    标签: vba ms-access ms-access-forms


    【解决方案1】:

    错误的原因是您没有评估 VBA 变量 Assm,而是将字符串 "Assm" 连接到 SQL 查询。

    strSQL = "UPDATE tblLOG " _
    & "SET Box= True " _
    & "WHERE Serial = Assm;"
    

    如果你要将Debug.Print 变量strSQL 发送到控制台,你会看到字符串:

    "UPDATE tblLOG SET Box= True WHERE Serial = Assm;"
    

    但是,由于Assm 在 SQL 查询中不是字符串(即它没有被单引号或双引号括起来),因此它被解释为在随后执行 SQL 查询时没有提供其值的参数.


    要解决这个问题,您可以连接 Assm 变量的评估值,例如:

    strSQL = "UPDATE tblLOG " _
    & "SET Box= True " _
    & "WHERE Serial = '" & Assm & "';"
    

    这假定 Serial 是一个 文本 字段 - 如果不是这种情况,请删除上面的单引号。

    你的整个代码可以被压缩成:

    Private Sub cbo1_Change()
        If MsgBox("Make Update", vbQuestion + vbYesNo, "UPDATE VALUE?") = vbYes Then
            CurrentDb.Execute "update tbllog set box = true where serial = '" & cbo1 & "';", dbFailOnError
            Response = acDataErrAdded
        End If
    End Sub
    

    不过,这仍然对SQL injection 开放,因此更好的做法是parameterise the query,例如:

    With CurrentDb.CreateQueryDef("", "update tbllog t set t.box = true where t.serial = myserial;")
        .Parameters!myserial = cbo1
        .Execute
    End With
    

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      相关资源
      最近更新 更多