Как объединить переменные даты, чтобы создать между ними в условии условия - PullRequest
0 голосов
/ 21 июня 2019

Когда я пытаюсь установить свое значение между заданной пользователем датой начала и датой окончания запроса, я сталкиваюсь с ошибкой времени выполнения 3071 (выражение введено неправильно или оно слишком сложно)

Используется для передачи заданной пользователем переменной из формы в запрос

. См. Ниже

WHERE (
IIf([Forms]![Find]![Entity]<>"",DB.Entity=[Forms]![Find]![Entity],"*")
AND IIf([Forms]![Find]![AEPS]<>"",DB.AEPSProgram=[Forms]![Find]![AEPS],"*")
AND IIf([Forms]![Find]![DeliveryType]<>"",DB.DeliveryType=[Forms]![Find]![DeliveryType],"*")
AND IIf([Forms]![Find]![ReportingYear] is not Null,DB.ReportingYear=[Forms]![Find]![ReportingYear],"*")
AND IIf([Forms]![Find]![Price] is not Null,DB.Price=[Forms]![Find]![Price],"*")
AND IIf([Forms]![Find]![Volume]is not Null,DB.Volume=[Forms]![Find]![Volume],"*")
AND IIf([Forms]![Find]![sDate] is not Null AND [Forms]![Find]![eDate] is not Null,DB.TransactionDate= ">" & [Forms]![Find]![sdate] & " and <" & [Forms]![Find]![edate],"*")
);

Если я установлю ее равной одной из дат, она будет работать какожидается.Я предполагаю, что что-то упускаю из-за того, как я присоединяюсь к датам

Спасибо

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Рассмотрите возможность присвоения условия NULL соответствующему столбцу через NZ(), который устанавливает столбец равным самому себе и, таким образом, избегает фильтрации любых строк по этому соответствующему условию.Одни только звездочки не приводят к булевому условию, если не используется оператор LIKE.

WHERE DB.Entity = NZ([Forms]![Find]![Entity], DBEntity) 
  AND DB.AEPSProgram = NZ([Forms]![Find]![AEPS], DB.AEPSProgram)
  AND DB.DeliveryType = NZ([Forms]![Find]![DeliveryType], DB.DeliveryType)
  AND DB.ReportingYear = NZ([Forms]![Find]![ReportingYear], DB.ReportingYear)
  AND DB.Price = NZ([Forms]![Find]![Price], DB.Price)
  AND DB.Volume = NZ([Forms]![Find]![Volume], DB.Volume)    
  AND DB.TransactionDate >= NZ([Forms]![Find]![sdate], DB.TransactionDate)
  AND DB.TransactionDate <= NZ([Forms]![Find]![edate], DB.TransactionDate)
;
1 голос
/ 21 июня 2019

Это (только для поля даты) работает:

WHERE (((DB.TransactionDate)>[Forms]![Find]![sdate] And (DB.TransactionDate)<[Forms]![Find]![edate])) OR ((([Forms]![Find]![sDate]+[Forms]![Find]![eDate]) Is Null));

Не использовать *, оно для использования с Как и .

...