Какой оператор неверен и возвращает ошибку «3075»? - PullRequest
0 голосов
/ 29 марта 2020

Я столкнулся с ошибкой времени выполнения '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 Ответ

2 голосов
/ 29 марта 2020

У вас есть несколько проблем:

  1. Поскольку cobDepartment представляется строкой (учитывая, что в коде есть выражение Me.cobDepartment <> "" ранее), значение потребуется заключаться в одинарные или двойные кавычки внутри оператора SQL, например:

    "SET DepartmentID='" & Me.cobDepartment & "'"
    
  2. Поля, содержащие пробелы или соответствующие зарезервированным словам в MS Access, должны быть заключены в квадратные скобки, например:

    [Payroll number]
    
  3. Самое главное: объединение значений непосредственно в оператор SQL предоставляет вашему коду возможность 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
    

    Использование параметров таким способом имеет дополнительное преимущество, заключающееся в автоматической обработке переменных типов данных SQL в вашем операторе SQL, что позволяет избежать необходимости в дополнительных кавычках или форматировании значений.

    * 10 27 * Конечно, это только один из возможных способов использования параметров в операторе SQL в MS Access - Этот превосходный ответ описывает множество других методов.
...