Ошибка времени выполнения 3061 Ожидается слишком мало параметров 4 - PullRequest
0 голосов
/ 02 мая 2018
CurrentDb.Execute "UPDATE Customer set [FirstName] = " & Me.FirstName & _
                                    " ,[LastName] = " & Me.LastName & _
                                    " ,[PhoneNumber] = '" & Me.PhoneNumber & _
                                    "' ,[Address] = '" & Me.Address & _
                                    "' ,[City] = " & Me.City & _
                                    " ,[State] = " & Me.State & _
                                    " ,[ZipCode] = " & Me.ZipCode & " WHERE ([E-mail] = '" & Me.email & "')"

что не так с этим запросом на обновление. Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Еще раз рассмотрим параметризацию SQL, лучшую отраслевую практику при работе с SQL, которая поддерживается в MS Access с использованием предложения PARAMETERS и QueryDefs . Вы избегаете беспорядочной конкатенации, вложений в кавычки (которых вам совсем не хватает для текстовых полей) и, возможно, внедрения SQL-кода, поскольку такие поля открыты для пользователей.

SQL (сохранить как сохраненный запрос доступа)

PARAMETERS [FirstNameParam] Text(255), [LastNameParam] Text(255),
           [PhoneNumberParam] Text(255), [AddressParam] Text(255),
           [CityParam] Text(255), [StateParam] Text(255),
           [ZipCodeParam] Text(255), [EmailParam] Text(255);
UPDATE Customer 
   SET [FirstName] = [FirstNameParam],
       [LastName] = [LastNameParam],
       [PhoneNumber] = [PhoneNumberParam],
       [Address] = [AddressParam],
       [City] = [CityParam],
       [State] = [StateParam],
       [ZipCode] = [ZipCodeParam]
WHERE ([E-mail] = [EmailParam]);

* VBA 1016 *

Dim qdef As QueryDef

Set qdef = CurrentDb.QueryDefs("mySavedParameterQuery")

' BIND VALUES TO PARAMETER PLACEHOLDERS
qdef![FirstNameParam] = Me.FirstName
qdef![LastNameParam] = Me.LastName
qdef![PhoneNumberParam] = Me.PhoneNumber
qdef![AddressParam] = Me.Address
qdef![CityParam] = Me.City
qdef![StateParam] = Me.State
qdef![ZipCodeParam] = Me.ZipCode
qdef![EmailParam] = Me.Email

' EXECUTE ACTION QUERY
qdef.Execute dbFailOnError

Set qdef = Nothing
0 голосов
/ 02 мая 2018

Просто предположение, глядя на ваш SQL и ошибку - я подозреваю, что ваши имена из 4 полей с двумя словами должны иметь пробелы между двумя словами: [FirstName] становится [First Name], [Last Name] становится [Last Name] и т. Д. на

Таким образом, строка SQL должна быть

"UPDATE Customer set [First Name] = " & Me.FirstName & _
                                        " ,[Last Name] = " & Me.LastName & _
                                        " ,[Phone Number] = '" & Me.PhoneNumber & _
                                        "' ,[Address] = '" & Me.Address & _
                                        "' ,[City] = " & Me.City & _
                                        " ,[State] = " & Me.State & _
                                        " ,[Zip Code] = " & Me.ZipCode & " WHERE ([E-mail] = '" & Me.email & "')"

Как говорит @ Jiggles32, единственный способ узнать наверняка - показать нам имена ваших полей из таблицы Customer

...