код VBA генерирует синтаксическую ошибку в инструкции UPDATE - PullRequest
0 голосов
/ 03 июля 2019

У меня следующий код при нажатии кнопки, и он генерирует синтаксическую ошибку 3144 в выражении UPDATE.Кажется, я не могу найти фактор, вызывающий ошибку.

strUpdate = "Update VehicleInfo SET " & _
"Vic1License ='" & strPlate1 & "', Vic1Make ='" & strMake1 & "', Vic1Model ='" & strModel1 & "', Vic1Year ='" & strYear1 & "', Vic1Color = '" & strColor1 & "'," & _
"Vic2License ='" & strPlate2 & "', Vic2Make ='" & strMake2 & "', Vic2Model ='" & strModel2 & "', Vic2Year ='" & strYear2 & "', Vic2Color = '" & strColor2 & "'," & _
"Vic3License ='" & strPlate3 & "', Vic3Make ='" & strMake3 & "', Vic3Model ='" & strModel3 & "', Vic3Year ='" & strYear3 & "', Vic3Color = '" & strColor3 & "'," & _
"Vic4License ='" & strPlate4 & "', Vic4Make ='" & strMake4 & "', Vic4Model ='" & strModel4 & "', Vic4Year ='" & strYear4 & "', Vic4Color = '" & strColor4 & "'," & _
"Vic5License ='" & strPlate5 & "', Vic5Make ='" & strMake5 & "', Vic5Model ='" & strModel5 & "', Vic5Year ='" & strYear5 & "', Vic5Color = '" & strColor5 & "'," & _
"Vic6License ='" & strPlate6 & "', Vic6Make ='" & strMake6 & "', Vic6Model ='" & strModel6 & "', Vic6Year ='" & strYear6 & "', Vic6Color = '" & strColor6 & "'," & _
" WHERE LastName= '" & strLast & "', AND FirstName= '" & strFirst & "'"

DoCmd.RunSQL strUpdate

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Не должно быть запятой в предложении where:

" WHERE LastName= '" & strLast & "', AND FirstName= '" & strFirst & "'"
                                   ^--------------------------------------- Remove this

Ни после последнего обновленного поля:

Vic6Color = '" & strColor6 & "'," & 
                               ^------------------------------------------- Remove this

Кроме того, всеваши поля (Vic#License, Vic#Make, Vic#Model, Vic#Year и т. д.) все строковые поля?Если нет, вы также должны удалить одиночные кавычки, окружающие значения, заполняющие те поля, которые не являются строковыми, например:

Vic1Year ='" & strYear1 & "',

Становится:

Vic1Year =" & strYear1 & ",

Однаков то время как вышеизложенное решает проблемы с синтаксисом в вашем коде, в целом, я настоятельно рекомендую избегать построения запросов SQL с использованием объединенных значений переменных по двум причинам:

  • Значения должны быть преобразованы в строкипредставляет истинное значение поля.

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

Вместо этого я бы предложил параметризацию вашего запроса , что позволяет избежать обоих вышеперечисленных действий.


Я также полностью согласен с сделанными комментариями @ ComputerVersteher : инкрементально именованные поля являются явным признаком плохого дизайна базы данных и отсутствия нормализации базы данных .

Предполагая, что ваша база данных описывает владение автомобилем, я бы личноПредлагаем три таблицы:

Владельцы

+--------------+
| OwnerID (PK) |
| FirstName    |
| LastName     |
+--------------+

Транспортные средства

+----------------+
| VehicleID (PK) |
| Make           |
| Model          |
| Plate          |
| Year           |
| Color          |
+----------------+

Владельцы транспортных средств (Соединительная таблица)

+----------------+
| ID (PK)        |
| OwnerID (FK)   |
| VehicleID (FK) |
+----------------+

Здесь у меня естьназначил отдельное поле первичного ключа в таблице соединений транспортных средств-владельцев, которое позволяет одновременно владеть транспортным средством нескольким владельцам (если вы хотите разрешить такой сценарий);в противном случае вы можете сформировать первичный ключ из комбинации OwnerID & VehicleID для обеспечения единоличного владения транспортным средством.

0 голосов
/ 03 июля 2019

Я нашел свою ошибку. После последней записи есть запятая strColor6 & "'," Как только я удалил ее, ошибка исчезла.

...