VBA, MS Access MS Access в примерах

SQL Запрос - Дата (Условие WHERE по полю типа Date/Time) - Between …

Dim sFilter$

'Фильтр по датам
    If IsDate(Me!txtDateFrom) = True And IsDate(Me!txtDateTo) = True Then 'Указаны даты начала и конца
        sFilter = sFilter & " AND Дата_Рождения Between " & _
                Format$(Me!txtDateFrom, "\#mm\/dd\/yyyy\#") & _
                " And " & _
                Format$(Me!txtDateTo, "\#mm\/dd\/yyyy\#")
    Else 'Указана только одна из дат - больше - меньше
        If IsDate(Me!txtDateFrom) = True Then 'Указана только дата начала периода
            sFilter = sFilter & " AND Дата_Рождения >=" & Format$(Me!txtDateFrom, "\#mm\/dd\/yyyy\#")
        End If
        If IsDate(Me!txtDateTo) = True Then   'Указана только дата окончания периода
            sFilter = sFilter & " AND Дата_Рождения <=" & Format$(Me!txtDateTo, "\#mm\/dd\/yyyy\#")
        End If
    End If



Используя Nz, можно проще применять открытые, полуоткрытые и замкнутые интервалы


'Фильтр по датам
    If IsDate(Me!txtDateFrom) = True Or IsDate(Me!txtDateTo) = True Then 'Указаны даты начала и конца
        sFilter = sFilter & " AND Дата_Рождения Between " & _
                Format$(Nz(Me!txtDateFrom, 0), "\#mm\/dd\/yyyy\#") & _
                " And " & _
                Format$(Nz(Me!txtDateTo, 999999), "\#mm\/dd\/yyyy\#") ' На Null = #11/25/4637#
    End If



Или по данным формы:


    s = "SELECT * FROM Табличка " & _
    "WHERE Дата BETWEEN Nz([Forms]![ОТ_ДО]![ОТ],#1/1/1000#) AND Nz([Forms]![ОТ_ДО]![ДО],#1/1/3000#)"

Назад ToTop
L.E. 22.05.2022
Рейтинг@Mail.ru