MS Access Update Query с функциями IIF и DATEADD - PullRequest
0 голосов
/ 08 ноября 2018

У меня 6 полей в "table1".

  • Текущая дата
  • Следующая дата корректировки
  • Прошедшие месяцы
  • Индекс 0
  • Индекс 1
  • Индекс 2.

Я пытаюсь создать запрос на обновление для индекса 1, где если (текущая дата + истекшие месяцы) <следующая дата корректировки, то индекс 1 равен индексу 0, если нет, я хочу индекс 1остаться на любой стоимости, которую он имеет в настоящее время.</p>

Я попробовал это

iif(DateAdd("m",[Table1]![Months Elapsed],[Table1]![Current Date])<[Table1]![Next Adjustment Date], [Table1]![Index 0]

Как только я добавлю [Table1]! [Дата следующей корректировки] в формулу iif, я получаю сообщение об ошибке «Введенное вами выражение содержит неверный синтаксис»,

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

iif( не соответствует закрытию )

Разработка синтаксиса в запросе SELECT. Затем используйте это выражение рабочего поля в вашем UPDATE. Вот мое предложение ...

SELECT
    IIf
        (
            DateAdd('m', t1.[Months Elapsed], t1.[Current Date]) < t1.[Next Adjustment Date],
            t1.[Index 0]
        )
FROM Table1 AS t1;

Обратите внимание, что у вашего IIf отсутствует третий аргумент, который является значением, которое возвращается, если условие (первый аргумент) не является Истиной. Ядро базы данных не будет жаловаться и вернет Null в этой ситуации. Смотри также этот ответ .

Однако ваше описание предполагает, что вы действительно хотите этого ...

    IIf
        (
            DateAdd('m', t1.[Months Elapsed], t1.[Current Date]) < t1.[Next Adjustment Date],
            t1.[Index 0],
            t1.[Index 1]
        )

... но для UPDATE мне имеет смысл перенести это условие в предложение WHERE и обновить только эти строки ...

UPDATE Table1 AS t1
SET t1.[Index 1] = t1.[Index 0]
WHERE DateAdd('m', t1.[Months Elapsed], t1.[Current Date]) < t1.[Next Adjustment Date];
0 голосов
/ 08 ноября 2018

У вас не указана ложная часть IIf. Попробуйте это;

IIf(DateAdd("m",[Table1]![Months Elapsed],[Table1]![Current Date])< [Table1]![Next Adjustment Date], [Table1]![Index 0], [Table1]![Index 1])

Однако я обеспокоен тем, что у вас, очевидно, есть поля, хранящиеся для текущей даты и прошедших месяцев. Разве они оба не рассчитаны на лету? Они должны быть.

...