MS Access VBA SQL SELECT * INTO tempTbl WHERE Stuff="" И OtherStuff МЕЖДУ Диапазоном дат

У меня есть форма с одним текстовым полем, двумя полями со списком (раскрывающиеся списки) и двумя текстовыми полями с масками ввода для mm/dd/yyyy 99/99/0000;0;_

Я пытаюсь использовать все эти поля в качестве фильтров для подчиненной формы. У меня есть элементы управления для запуска после обновления и запуска сабвуфера, который создает SELECT * INTO Строка SQL для временной таблицы, которая затем sourceobject'ed назад к subform,

В коде, который я имею для каждого элемента управления, у меня есть код, строящий фрагмент инструкции Where для финального sql, фрагмент растет по мере необходимости, помечен как "Фильтр"

Какой-то другой незавершенный кодекс....

If Not IsNull(txtDateFrom) Then
If i > 1 Then Filter = Filter & " AND " & "([Date_LastSaved] >= " & Me.txtDateFrom & ")" & " And " & "([Date_LastSaved] <= " & Me.txtDateTo & ")"
End If


Dim sql As String
sql = "SELECT * INTO tmpTable FROM tblReview"
If Not IsNull(Filter) Then
    sql = sql & " WHERE " & Filter
End If

Моя проблема и вопрос в том, что я тестирую эту конкретную ситуацию, где будет Filter = Filter & " AND " & "DATE_STUFF"

где последний sql выглядит как...

SELECT * INTO tmpTable FROM tblReview WHERE ReviewStatus = 'Quoted' AND ([Date_LastSaved] >= 09/12/2018) And ([Date_LastSaved] <= 10/16/2018)

который должен иметь некоторый результат с данными испытаний. Тем не менее, tmpTable пуст.

Это происходит только тогда, когда я применяю критерии диапазона дат.

Я старался BETWEEN но не смог записать синтаксис.

Любое понимание высоко ценится, спасибо!

ОБНОВЛЕНИЕ: Ответ:

If i > 1 Then Filter = Filter & " AND " & "([Date_LastSaved] >= #" & Me.txtDateFrom & "#)" & " And " & "([Date_LastSaved] <= #" & Me.txtDateTo & "#)"

1 ответ

Решение

Если вы хотите использовать даты, они должны быть указаны. Если вы просто скажете 16.10.08, то вы поделите целое число 10 на 16 к 2018 году, что даст целое ноль. Затем он преобразует даты в целое число, чтобы выполнить сравнение, которое даст намного большее число, и, таким образом, вы не получите строк.

Любое тестирование даты всегда должно выполняться с использованием типов даты, а не строк. Я думаю, что в msaccess вы можете заключить его в #, но не уверен. Просто исследуй это.

Другие вопросы по тегам