Рассмотрим параметризацию, которая поддерживается в MS Access с использованием QueryDefs и помогает избежать необходимости в пунктуации или конкатенации:
Dim strSQL As String
Dim qdef As QueryDef
' PREPARED SQL STATEMENT WITH PARAMETERS CLAUSE (NO DATA)
strSQL = "PARAMETERS [prmDOB] Date, [prmLastMaintainDate] Date, "_
& " [prmLastmaintainUser] Text, [prmID] Long;"
& " UPDATE mytable " _
& " SET DOB = [prmDOB], " _
& " Last_Maintain_Date = [prmLastMaintainDate], " _
& " LastmaintainUser = [prmLastmaintainUser] " _
& " WHERE ID = [prmID]"
Set qdef = CurrentDb.QueryDefs("", strSQL)
' BIND PARAMS (NO QUOTES OR HASHTAGS)
qdef![prmDOB] = DOB ' ASSUMED TO BE A DATE TYPE
qdef![prmLastMaintainDate] = LastMaintainDate ' ASSUMED TO BE A DATE TYPE
qdef![prmLastmaintainUser] = LastmaintainUser ' ASSUMED TO BE A STRING TYPE
qdef![prmID] = ID ' ASSUMED TO BE AN INT/LONG TYPE
' RUN ACTION
qdef.Execute dbFailOnError
Set qdef = Nothing
Вы даже можете сохранить вышеуказанный оператор обновления как сохраненный MS Accessзапрос и ссылка на него ниже, полностью отделяя SQL от VBA:
Set qdef = CurrentDb.QueryDefs("mySavedUpdateQuery")
' BIND PARAMS
qdef![prmDOB] = DOB
qdef![prmLastMaintainDate] = LastMaintainDate
qdef![prmLastmaintainUser] = LastmaintainUser
qdef![prmID] = ID
' RUN ACTION
qdef.Execute dbFailOnError
Set qdef = Nothing
Обратите внимание, что параметризация SQL - это лучшая отраслевая практика программирования, которая распространяется за пределы VBA до любого прикладного уровня, который запускает SQL какнизкоуровневый язык, включая языки общего назначения, такие как Java, Python, C #, PHP и другие. Хотя реализация отличается, концепция одинакова для отделения SQL от кода приложения. См. Соучредитель StackOverflow Джефф Этвуд Дайте мне параметризованный SQL или дайте мне смерть .