Ошибка DoCmd.RunSQL, нужны лучшие переменные? - PullRequest
0 голосов
/ 26 октября 2018

Все мои переменные работают, я могу сделать так, чтобы значение каждой переменной отображалось в текстовом поле, и код работал гладко.Однако, когда я пытаюсь обновить table1, в строке DoCmd.RunSQL появляются ошибки.Может быть, потому что добавление значения к ID = Y делает Y больше не истинным?

Y = DMax("[ID]", "Table1", "Len(Due_date) = 0")
X = DMin("[ID]", "Table1")
A = DMin("[ID]", "Table1", "Len(Due_date) > 0")

B = DLookup("[Duration]", "Table1", "[ID] = " & Y)
C = DLookup("[Due_date]", "Table1", "[ID] = " & A)
E = DateAdd("d", -B, C)


 Dim SQL As String

        SQL = "UPDATE Table1 " & _
          "SET Table1.Due_date = '" & E & "'" & _
         "WHERE Table1.ID = '" & Y & "'"


DoCmd.RunSQL SQL

1 Ответ

0 голосов
/ 27 октября 2018

Полагаю, что ошибка возникает из-за того, что ваша дата 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...