2013-07-29 3 views
1

Я могу искать между датами, но если я хочу просто искать с даты начала и после.Как искать с даты начала и без даты окончания?

Я пытался научить себя VBA и SQL за последние пару недель ... Это рабочий прогресс.

If Me.tb_dateRange1 <> "" And Me.tb_dateRange2 <> "" Then 

    Dim LYear As Integer 
    Dim thisDate As Date 

    startDate = Me.tb_dateRange1 
    endDate = Me.tb_dateRange2 
    LYear = Year(endDate) 

    If variationNumber = 0 Then 
     sqlDateRange = " WHERE " & sqlDateRange 
    Else 
     sqlDateRange = " AND " & sqlDateRange 
    End If 

    'No end date conditions 
    If endDate <> "" Then 
     sqlDateRange = sqlDateRange & " Between #" & startDate & "# And #" & endDate & "#" 
    Else 
     'thisDate = #12/12/2223# 
     sqlDateRange = sqlDateRange & " >= #" & startDate & "#" 
    End If 

    sqlMiddle = sqlMiddle & sqlDateRange 
    variationNumber = variationNumber + 1 
End If 
+0

Я отредактировал код, и это больше не вызывает ошибку. Теперь ничего не происходит. – trama

ответ

0

Кажется, ваша цель состоит в том, чтобы построить пункт WHERE основанных на 2 текстовых полей, но только для тех, которые содержат значение.

Я не понимаю ваш код, поэтому будет предлагать вам этот подход, который был испытан с формой образца в Access 2007.

Const cstrFormat As String = "\#yyyy-mm-dd\#" 
Dim strWhere As String 

strWhere = vbNullString ' make it explicit 
If IsDate(Me.tb_dateRange1) = True Then 
    strWhere = "field_name >= " & Format(Me.tb_dateRange1, cstrFormat) 
End If 
If IsDate(Me.tb_dateRange2) = True Then 
    ' add AND if we got something from the first text box 
    If Len(strWhere) > 0 Then 
     strWhere = strWhere & " AND " 
    End If 

    strWhere = strWhere & "field_name <= " & _ 
     Format(Me.tb_dateRange2, cstrFormat) 
End If 
If Len(strWhere) > 0 Then 
    ' add WHERE 
    strWhere = "WHERE " & strWhere 
End If 

Заменить field_name с именем вашего поля. Если вам нужно оценить время суток в дополнение к дате, измените постоянную формата.

cstrFormat As String = "\#yyyy-mm-dd hh:nn:ss\#" 

Я не знаю, как вы будете использовать WHERE строку, так что я просто отобразить его в MsgBox.

If Len(strWhere) > 0 Then 
    MsgBox strWhere 
Else 
    MsgBox "no dates, so no WHERE" 
End If 
1

Вы хотите, чтобы искать значения, которые больше или равно StartDate:

sqlDateRange = sqlDateRange & " >= #" & startDate & "#" 

Access SQL очень частности, о финиковых форматов он будет принимать:

sqlDateRange = sqlDateRange & " >= #" & Format(startDate, "mm/dd/yyyy") & "#" 

или, если необходимо,

sqlDateRange = sqlDateRange & " >= #" & Format(startDate, "yyyy-mm-dd") & "#" 

(стандартная дата обозначение ISO)

+0

Я отредактировал с вашим предложением, он все еще не ищет больше, чем дата начала. – trama

+0

Я добавил к своему ответу. –

+1

Если вы не получаете результатов, возможно, нет никаких квалифицированных данных. Перед тем, как попробовать в своем приложении, запустите свой запрос непосредственно перед базой данных. –

Смежные вопросы