У меня есть база данных со связанными таблицами - Персонал, Курсы и Training_Record. Каждый сотрудник имеет числовой первичный ключ, как и каждый курс, и каждую запись в таблице Training_Record. Staff_ID и Course_ID в справочной записи Training_Record в персонале и курсах.Доступ к VBA: SQL-запрос вызывает ошибку синтаксиса UPDATE
Когда сотрудник или курс добавлены, Training_Record (поля: Staff_ID, Course_ID, Date_Taken, Notes) имеет персонал, записи курса вставлены, поэтому добавление сотрудника 1 вставляет записи (1,1 ,,,), (1,2 ,,,) и т. Д., Добавление курса 8 будет включать записи (1,8 ,,,), (2,8 ,,,) и т. Д. Это работает.
У меня тогда есть форма для записи обучения. Пользователь выбирает курс, вводит дату и выбирает сотрудников из списка. У меня есть кнопка сохранения, которая запускает код VBA. Дата и курс вытягиваются из ящиков, и я петлю вокруг списка, объединяя выбранных сотрудников в строку. Все это работает и отображается окно с сообщением, подтверждающее это. Затем необходимо запустить SQL-запрос обновления, обновив Training_Record.
Проблема у меня с обновлением SQL. У меня есть запрос на обновление, которое будет работать в редакторе SQL запросов, хотя он использует написано в переменных:
UPDATE Training_Record
SET Date_Taken = '12/12/12'
WHERE Staff_ID IN (1,2,3,4,5) AND Course_ID = 4
Это обновляет Training_Record, чтобы показать, что сотрудники 1,2,3,4 и 5 взяли курс 4 по 12/12/12. Однако в VBA это не сработает. Это мой SQL запрос в VBA:
strSQL = "UPDATE Training_Record" _
& "SET Date_Taken = (" & strDate & ")" _
& "WHERE Staff_ID IN (" & strCriteria & ") AND Course_ID = (" & strCourse & ")"
DoCmd.RunSQL strSQL
ошибка, что код генерирует это «ошибка времени выполнения„3144“: ошибка синтаксиса в UPDATE заявлении.» и отладчик высвечивает заявление DoCmd.RunSQL после query.The всего кода VBA:
Private Sub SaveTraining_Click()
Dim db As DAO.Database
Dim VarItem As Variant
Dim strCriteria As String
Dim strDate As Variant
Dim strCourse As Variant
Dim strSQL As String
Set db = CurrentDb()
'Extract the course ID and the training date from the form
strCourse = Me!CourseID.Value
strDate = Me!TrainingDate.Value
'Dealing with empty boxes- zero length
If IsNull(strCourse) Then
MsgBox "Please select a course." _
, vbOKOnly, "No course selected"
End If
If IsNull(strDate) Then
MsgBox "Please enter a date." _
, vbOKOnly, "No date given"
End If
If StaffMembers.ItemsSelected.Count = 0 Then
MsgBox "Please select staff members." _
, vbOKOnly, "No staff members"
End If
If (Not IsNull(strCourse)) And (Not IsNull(strDate)) And (StaffMembers.ItemsSelected.Count > 0) Then
'Extract each selected member and concatenate into a string for sql query
For Each VarItem In Me!StaffMembers.ItemsSelected
strCriteria = strCriteria & "," & Me!StaffMembers.ItemData(VarItem)
Next VarItem
'Gets rid of extra comma on query string
strCriteria = Right(strCriteria, Len(strCriteria) - 1)
'Message box
MsgBox ("Staff: " & strCriteria & vbNewLine & "Date: " & strDate & vbNewLine & "Course: " & strCourse & vbNewLine & "No. Selected staff: " & StaffMembers.ItemsSelected.Count)
strSQL = "UPDATE Training_Record" _
& "SET Date_Taken = (" & strDate & ")" _
& "WHERE Staff_ID IN (" & strCriteria & ") AND Course_ID = (" & strCourse & ")"
DoCmd.RunSQL strSQL
End If
Set db = Nothing
End Sub
TL; DR Я не могу сделать SQL UPDATE Выполнить запрос в VBA
У меня есть ощущение, что это ошибка в синтаксисе где-то, но я не могу найти где. Любые идеи/советы были бы очень благодарны, спасибо.
Было бы хорошо, чтобы добавить 'Debug.Print strSql' непосредственно перед' DoCmd.RunSql', чтобы посмотреть, как выглядит ваше утверждение. –