Vba 哪个运算符不正确并返回错误';3075';?

Vba 哪个运算符不正确并返回错误';3075';?,vba,ms-access-2013,Vba,Ms Access 2013,我遇到了运行时错误“3075”,不确定出了什么问题。请帮忙 Private Sub btnUpdate_Click() If Me.cobDepartment <> "" Then CurrentDb.Execute "UPDATE tblSite " & _ " SET DepartmentID= " & Me.cobDepartment & _ " WHERE Payroll number=" & Me.Payr

我遇到了运行时错误“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
Private Sub btnUpdate_Click()
如果我是“部门”,那么
当前数据库。执行“更新tblSite”&_
“设置部门ID=“&Me.cobDepartment&_
“其中Payroll number=“&Me.Payroll\u number.Value&”
MsgBox“已更新”
其他的
MsgBox“选择部门”
如果结束
端接头
您有几个问题:

  • 由于
    cobDepartment
    似乎是一个字符串(假设您在代码前面有表达式
    Me.cobDepartment”“
    ),该值需要在SQL语句中用单引号或双引号括起来,例如:

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

    [Payroll number]
    
  • 最重要的是:将值直接连接到SQL语句中会使您的代码暴露出以下可能性,即用户可以将其他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
    
    Private Sub btnUpdate_Click()
    如果我是“部门”,那么
    使用CurrentDb.CreateQueryDef(“,”更新tblsite集合部门ID=@did,其中[payroll number]=@prn”)
    .Parameters(“@did”)=Me.cob
    .Parameters(“@prn”)=Me.Payroll\u编号
    .执行
    以
    MsgBox“已更新”
    其他的
    MsgBox“选择部门”
    如果结束
    端接头
    
    以这种方式使用参数还有一个额外的好处,就是可以自动处理SQL语句中的各种SQL数据类型,从而避免需要额外的引号或值格式

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

  • 您有几个问题:

  • 由于
    cobDepartment
    似乎是一个字符串(假设您在代码前面有表达式
    Me.cobDepartment”“
    ),该值需要在SQL语句中用单引号或双引号括起来,例如:

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

    [Payroll number]
    
  • 最重要的是:将值直接连接到SQL语句中会使您的代码暴露出以下可能性,即用户可以将其他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
    
    Private Sub btnUpdate_Click()
    如果我是“部门”,那么
    使用CurrentDb.CreateQueryDef(“,”更新tblsite集合部门ID=@did,其中[payroll number]=@prn”)
    .Parameters(“@did”)=Me.cob
    .Parameters(“@prn”)=Me.Payroll\u编号
    .执行
    以
    MsgBox“已更新”
    其他的
    MsgBox“选择部门”
    如果结束
    端接头
    
    以这种方式使用参数还有一个额外的好处,就是可以自动处理SQL语句中的各种SQL数据类型,从而避免需要额外的引号或值格式

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


  • 我认为“Payroll number”必须放在括号中,如下所示:[Payroll number]。未工作错误3464-数据类型不匹配查询结束时缺少EMI冒号-Me.Payroll_number.Value&“;”。并检查payroll_number.value的数据类型是否与payroll number列的数据类型相同。我认为“payroll number”必须在括号中,如:[payroll number]。未工作错误3464-数据类型不匹配查询结束时缺少EMI冒号-Me.payroll_number.value&“;”。并检查payroll_number.value的数据类型是否与payroll number列的数据类型相同。