Доступ к запросу, возвращающему даты вне диапазона ввода - PullRequest
1 голос
/ 09 ноября 2019

Я создал запрос для выбора всех дат в диапазоне дат, который вводится пользователем. Когда пользователь выбирает дату до текущей даты, текущую дату или день после текущей даты, он возвращает даты, не входящие в диапазон дат.

Пожалуйста, смотрите мои примеры ниже:

До сегодняшней даты, возвращая неверные даты в диапазоне:

before todays date returning incorrect dates in range

Выбор даты через 3 дня после запроса текущей датысовершенный запрос:

selecting date 3 days after current date query query perfectly

 Option Compare Database

  Private Sub Command121_Click()

  Dim strCriteria, task As String



strCriteria = "([PromisedDeliveryDate] >= #" & Me.DateFrom & "# And [PromisedDeliveryDate] <= #" & Me.DateTo & "#)"
task = "select * from SageOrderLine_Live where (" & strCriteria & ")"
DoCmd.ApplyFilter task

End Sub

РЕДАКТИРОВАТЬ: Как бы добавить к запросу также customeraccountnumber? Я пытался добавить его, но он выдает ошибку:

  DoCmd.ApplyFilter _
"select * from SageOrderLine_Live where " & _
"[PromisedDeliveryDate] >= " & Format(Me.DateFrom, "\#mm\/dd\/yyyy\#") & " and " & _
"[PromisedDeliveryDate] <= " & Format(Me.DateTo, "\#mm\/dd\/yyyy\#") & " and " & _
"[CustomerAccountNumber] = " & Me.CustomerAccount & ""

При выборе поиска появляется «Поле ввода параметров»:

Enter parameter box appearing when selecting search

1 Ответ

0 голосов
/ 09 ноября 2019

При ссылке на значения даты в инструкции SQL вам необходимо убедиться, что такие даты соответствуют ожидаемому формату:

#mm/dd/yyyy#

Иначе, например, 08/11/2019 (8 )th Ноябрь 2019) будет интерпретироваться в SQL как 11/08/2019 (11 th Август 2019), давая результаты, свидетелями которых вы являетесь.

Вы можете достичь этого, используяFormat функция:

Format(Me.DateFrom, "\#mm\/dd\/yyyy\#")

Здесь дополнительные обратные косые черты \, предшествующие окто-типам и косые черты, действуют как Escape-символы , заставляя MS Access отображатьсяследующий символ в виде литерала.

Например:

?Format(Date(), "\#mm\/dd\/yyyy\#")
#11/09/2019#

В вашем коде это может быть написано:

Private Sub Command121_Click()
    DoCmd.ApplyFilter _
    "select * from SageOrderLine_Live where " & _
    "[PromisedDeliveryDate] >= " & Format(Me.DateFrom, "\#mm\/dd\/yyyy\#") & " and " & _
    "[PromisedDeliveryDate] <= " & Format(Me.DateTo, "\#mm\/dd\/yyyy\#")
End Sub

В качестве альтернативы, вы можете ссылаться на формуконтролирует непосредственно в операторе SQL, в этом случае форматирование не требуется:

Private Sub Command121_Click()
    DoCmd.ApplyFilter _
    "select * from SageOrderLine_Live where " & _
    "[PromisedDeliveryDate] >= [Forms]![YourFormName]!DateFrom and " & _
    "[PromisedDeliveryDate] <= [Forms]![YourFormName]!DateTo "
End Sub

(конечно, обновляя YourFormName до имени вашей формы).


РЕДАКТИРОВАТЬ: Если вы хотите добавить CustomerAccountNumber в фильтр, sincЕсли это текстовое поле, вам нужно заключить значение в одинарные или двойные кавычки, например, используя одинарные кавычки:

DoCmd.ApplyFilter _
"select * from SageOrderLine_Live where " & _
"[PromisedDeliveryDate] >= " & Format(Me.DateFrom, "\#mm\/dd\/yyyy\#") & " and " & _
"[PromisedDeliveryDate] <= " & Format(Me.DateTo, "\#mm\/dd\/yyyy\#") & " and " & _
"[CustomerAccountNumber] = '" & Me.CustomerAccount & "'"

или двойные кавычки:

DoCmd.ApplyFilter _
"select * from SageOrderLine_Live where " & _
"[PromisedDeliveryDate] >= " & Format(Me.DateFrom, "\#mm\/dd\/yyyy\#") & " and " & _
"[PromisedDeliveryDate] <= " & Format(Me.DateTo, "\#mm\/dd\/yyyy\#") & " and " & _
"[CustomerAccountNumber] = """ & Me.CustomerAccount & """"
...