Полагаю, что ошибка возникает из-за того, что ваша дата E
выглядит отформатированной с использованием региональных настроек в строке SQL.
Вы можете использовать метод BuildCriteria для создания строки SQL формы fieldname ComparisonOperator CompareExpression
, например Due_date=#10/27/2018#
. Хотя CStr
преобразует значение в строку с использованием региональных настроек, BuildCriteria берет эту региональную строку и преобразует ее в правильно отформатированную строку для использования в команде SQL, как это делает дизайнер запросов при вводе критериев в региональном формате. Ваш код может выглядеть так (переменная X
не используется):
Y = DMax("ID", "Table1", BuildCriteria("Due_date", dbDate, "Null"))
A = DMin("ID", "Table1", BuildCriteria("Due_date", dbDate, "Not Null"))
B = DLookup("Duration", "Table1", BuildCriteria("ID", dbLong, CStr(Y)))
C = DLookup("Due_date", "Table1", BuildCriteria("ID", dbLong, CStr(A)))
E = DateAdd("d", -B, C)
Dim SQL As String
SQL = "UPDATE Table1 " & _
"SET " & BuildCriteria("Due_date", dbDate, CStr(E)) & " " & _
"WHERE " & BuildCriteria("ID", dbLong, CStr(Y))
DoCmd.RunSQL SQL