Просто используйте параметризованные запросы и избегайте необходимости объединять строки SQL в VBA.В частности, сохраните ниже двух операторов SQL в качестве сохраненных запросов доступа.Затем свяжите параметры, используя QueryDefs в VBA для более чистого, удобочитаемого и обслуживаемого кода.
Примечание: два запроса на обновление могут быть объединены в один.Также используется псевдоним таблицы t .При использовании Query Design Access не позволяет сохранять запросы с синтаксической ошибкой.Ниже предполагается, что параметром будет строковое / текстовое значение.
SQL
Обновление запроса
PARAMETERS idparam TEXT(255);
UPDATE tbl_InterfaceLog t
SET t.[LastUpdated] = Date(),
t.[LastUpdatedBy] = Username()
WHERE [CorrectedMedEdID] = idparam;
Добавление запроса
PARAMETERS idparam TEXT(255);
INSERT INTO tbl_AuditLog ([Status], [Comments], [Owner], [corrected med ed ID],
[Upload File Name], [Submission Method], AirfareStatus,
GroundStatus, MealsStatus, AccomodationStatus,
AirfareComment, GroundComment, MealsComment,
AccommodationComment, Coordinator, SupportRequested,
LastUpdated, Reviewed, ReviewerComment, RequiredChange,
EventDate, ProductsMatch, SubmissionMethod,
TravelDestination, LastUpdatedBy)
SELECT t.Status, t.Comments, t.Owner, t.[corrected med ed ID], t.[Upload File Name],
t.[Submission Method], t.AirfareStatus, t.GroundStatus, t.MealsStatus,
t.AccomodationStatus, t.AirfareComment, t.GroundComment, t.MealsComment,
t.AccommodationComment, t.Coordinator, t.SupportRequested, t.LastUpdated,
t.Reviewed, t.ReviewerComment, t.RequiredChange, t.EventDate, t.ProductsMatch,
t.SubmissionMethod, t.TravelDestination, t.LastUpdatedBy
FROM tbl_InterfaceLog t
WHERE t.[CorrectedMedEdID] = idparam;
VBA (без объединения)
Private Sub Form_AfterUpdate()
Dim UserName As String
Dim qdef as QueryDef
' UPDATE QUERY
Set qdef = CurrentDb.QueryDefs("myUpdateQuery")
qdef!idparam = Me.[Corrected Med Ed ID] ' BIND PARAM
qdef.Execute dbFailOnError ' EXECUTE QUERY
Set qdef = Nothing
' APPEND QUERY
Set qdef = CurrentDb.QueryDefs("myAppendQuery")
qdef!idparam = Me.[Corrected Med Ed ID] ' BIND PARAM
qdef.Execute dbFailOnError ' EXECUTE QUERY
Set qdef = Nothing
End Sub
Или подход DRY-er:
Private Sub Form_AfterUpdate()
Dim UserName As String, qry As Variant
Dim qdef as QueryDef
' RUN ACTION QUERIES
For Each qry in Array("myUpdateQuery", "myAppendQuery")
Set qdef = CurrentDb.QueryDefs(qry)
qdef!idparam = Me.[Corrected Med Ed ID] ' BIND PARAM
qdef.Execute dbFailOnError ' EXECUTE QUERY
Set qdef = Nothing
Next qry
Set qdef = Nothing
End Sub