Ms Access нарушает функцию DateDiff iif

У меня есть расчетный столбец, чтобы проверить, не прошло ли «Последний платеж» менее 90 дней с «даты вывода». Выражение:

IIf(DateDiff('d',[Last Payment],[withdrawaldate])<=90,'1')

Если я редактирую это в представлении sql, он отлично работает. Однако, если я редактирую это с помощью построителя запросов, он ломается и говорит «Недопустимый синтаксис», выделяя «1» как недопустимый раздел.

"Последний платеж" также является вычисляемым полем, если это имеет значение?

Что мне не хватает?

Пожалуйста помоги

Заранее спасибо!

Изменить

Просмотр SQL следующим образом:

SELECT Book.Cause_Date, Book.Is_Archived, Book.Status, Book.Handover_Status, Max(Payments.[Capture Date]) AS [Last Payment], Withdrawaltest.ACCOUNTNO, Withdrawaltest.WITHDRAWALDATE, Withdrawaltest.WITHDRAWALREASON, IIf(Abs(DateDiff('d',[Last Payment], [WITHDRAWALDATE])<=90)='1',"Yes","No") AS [Paid in 90Days], IIf((Abs(DateDiff('m',[Cause_Date],[WITHDRAWALDATE])<=14)='1' And [Handover_Status]='3') Or (Abs(DateDiff('m',[Cause_Date], [WITHDRAWALDATE])<=9)='1' And [Handover_Status]='1'),'No','Yes') AS [Out Of Term], IIf([Paid in 90Days]="Yes" Or [Out Of Term]="No","KEEP","DontBother") AS [Keep?] FROM Payments RIGHT JOIN (Book INNER JOIN Withdrawaltest ON Book.Case_Reference = Withdrawaltest.ACCOUNTNO) ON Payments.[Case Reference] = Withdrawaltest.ACCOUNTNO GROUP BY Book.Cause_Date, Book.Is_Archived, Book.Status, Book.Handover_Status, Withdrawaltest.ACCOUNTNO, Withdrawaltest.WITHDRAWALDATE, Withdrawaltest.WITHDRAWALREASON, IIf((Abs(DateDiff('m',[Cause_Date],[WITHDRAWALDATE])<=14)='1' And [Handover_Status]='3') Or (Abs(DateDiff('m',[Cause_Date], [WITHDRAWALDATE])<=9)='1' And [Handover_Status]='1'),'No','Yes') ORDER BY Max(Payments.[Capture Date]) DESC;


person Stefanpt    schedule 20.08.2016    source источник
comment
Это сбивает нас с толку - вы должны показать свое представление SQL - а почему конструктор запросов отличается - вы говорите о представлении «Дизайн»? - может показать скриншот   -  person dbmitch    schedule 20.08.2016


Ответы (1)


Во-первых, в вашем выражении отсутствует часть "False" IIf:

IIf(DateDiff('d',[Last Payment],[withdrawaldate])<=90, '1', <FALSE-PART>)

Во-вторых, если вы используете German Access, вы должны использовать ; вместо , для функций в представлении конструктора запросов.

IIf(DateDiff('d';[Last Payment];[withdrawaldate])<=90; '1'; <FALSE-PART>)

Но в представлении SQL (то есть "международном") это ,.

person Andre    schedule 22.08.2016
comment
Спасибо, Андре, я взгляни на это А пока я внес поправки в это: IIf(Abs(DateDiff('d',[Last Payment],[WITHDRAWALDATE])<=90)='1',"Yes","No") И, кажется, работает довольно хорошо - person Stefanpt; 22.08.2016