Причина вашей ошибки в том, что вы не оцениваете переменную 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
- это поле text - если это не так, удалите одинарные кавычки из приведенного выше.
Весь ваш код может быть сжат до:
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-инъекции , и поэтому лучше всего параметризировать запрос , например ::
With CurrentDb.CreateQueryDef("", "update tbllog t set t.box = true where t.serial = myserial;")
.Parameters!myserial = cbo1
.Execute
End With