哪个运算符不正确,returns 错误“3075”?

Which operator is incorrect and returns error '3075'?

我遇到了 运行 时间错误“3075”,不确定出了什么问题。请帮忙

Private Sub btnUpdate_Click()

If Me.cobDepartment <> "" Then


     CurrentDb.Execute "UPDATE tblSite " & _
     " SET DepartmentID= " & Me.cobDepartment & _
     " WHERE Payroll number=" & Me.Payroll_number.Value & ""
     MsgBox "Updated"

     Else
     MsgBox "Select Department"



End If

End Sub

您有几个问题:

  1. 因为 cobDepartment 看起来是一个字符串(假设您在代码前面有表达式 Me.cobDepartment <> ""),该值需要用 single 或 double 包围SQL 语句中的引号,例如:

    "SET DepartmentID='" & Me.cobDepartment & "'"
    
  2. 包含空格或与 MS Access 中的保留字相对应的字段需要用方括号括起来,例如:

    [Payroll number]
    
  3. 最重要的是: 将值直接连接到 SQL 语句中会使您的代码暴露于 SQL injection 的可能性,从而用户可以 'inject' 附加 SQL 指令到被连接的值中。

    更好的方法是使用参数,例如:

    Private Sub btnUpdate_Click()
        If Me.cobDepartment <> "" Then
            With CurrentDb.CreateQueryDef("","update tblsite set departmentid=@did where [payroll number]=@prn")
                .Parameters("@did") = Me.cobDepartment
                .Parameters("@prn") = Me.Payroll_number
                .Execute
            End With
            MsgBox "Updated"
        Else
            MsgBox "Select Department"
        End If
    End Sub
    

    以这种方式使用参数还有一个额外的好处,即可以在 SQL 语句中自动处理不同的 SQL 数据类型,避免需要额外的引号或格式化值。

    当然,这只是在 MS Access 的 SQL 语句中使用参数的一种可能方式 - 描述了许多其他方法。