Переходя от моего комментария, сначала нужно объявить strSQL
в качестве переменной строки. Где ваша ошибка ожидает 6 значений, а доступ не знает, что они собой представляют. Это связано с тем, что объекты формы должны находиться вне котировок SQL-запроса, иначе (как в этом случае) они будут считать, что они являются переменными и, очевидно, не определены. Ожидаемые 6 - это 5 полей формы плюс 'strSQL'.
Private Sub b_Update_Click()
Dim db As DAO.Database
dim strSQL as string
Set db = CurrentDb
strSQL = "UPDATE Main" & _
" SET t_Name = '" & Me.txt_Name & "'," & _
" t_Date =#" & Me.txt_Date & "#," & _
" t_ContactID =" & Me.txt_Contact & "," & _
" t_Score =" & Me.txt_Score & "," & _
" t_Comments = '" & Me.txt_Comments & "'," & _
" WHERE RecordID = '" & Me.lbl_RecordID.Caption & "';"
CurrentDb.Execute strSQL
end sub
Обратите внимание, как я использовал двойные кавычки, чтобы поместить поля формы вне строки запроса, чтобы доступ знал, что они не являются переменными. Если ваше поле является строкой, ему нужно инкапсулировать в одинарные кавычки, например 'string'
. Если у вас есть поле даты, ему необходимо инкапсулировать в числовые знаки, например #date#
, а числа/целые числа не требуют инкапсуляции.
Посмотрите на код, который я сделал, и вы можете видеть, что я использовал эти одинарные кавычки и знаки количества, чтобы инкапсулировать определенные поля. Я догадался, основываясь на именах полей, таких как ID
. Возможно, у меня есть некоторые ошибки, поэтому измените, где это применимо ... Или комментарий, и я исправлю свой ответ.
Вы передаете буквальную строку «Me.txt_Name» (и т. Д.) Вместо самого значения. –
Это текстовые поля, которые следует добавить .value? –
Вам нужно построить фактические значения в строке SQL, поэтому 'strSQL =" UPDATE Main SET t_Name = '"& Me.txt_Name &"', t_Date ... ' –