MS Access VBA SQL SELECT * INTO tempTbl WHERE Stuff = "" И OtherStuff МЕЖДУ Диапазоном дат - PullRequest
0 голосов
/ 17 октября 2018

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

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

В коде, который у меня есть для каждогоcontrol У меня есть код, создающий фрагмент инструкции 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 Ответ

0 голосов
/ 17 октября 2018

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

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

...