У меня есть форма (frmReports
) с двумя несвязанными текстовыми полями, которые используются для ввода дат.Один - ОТ, другой - ТО.
Они используются для фильтрации отчета (rptAllCommissions
).Если в текстовых полях есть значения, они фильтруются.Если их нет, или если есть одна дата, а не обе, создается оператор WHERE для открытия отчета.Вот код:
Private Sub cmdCommissions_Click()
Dim strDateFrom As String
Dim strDateTo As String
Dim strWhere As String
Const strcJetDate = "\#mm\/dd\/yyyy\#"
strDateFrom = "[ClosingDate]"
If IsDate(Me.txtFrom) Then
strWhere = "(" & strDateFrom & " >=" & Format(Me.txtFrom, strcJetDate) & ")"
End If
If IsDate(Me.txtTo) Then
If strWhere <> vbNullString Then
strWhere = strWhere & " AND "
End If
strWhere = strWhere & "(" & strDateFrom & " <= " & Format(Me.txtTo + 1, strcJetDate) & ")"
End If
If CurrentProject.AllReports("rptAllCommissions").IsLoaded Then
DoCmd.Close acReport, "rptAllCommissions"
End If
Debug.Print strWhere
DoCmd.OpenReport "rptAllCommissions", acViewReport, strWhere
Exit_Handler:
Exit Sub
Err_Handler:
If Err.Number <> 2501 Then
MsgBox "Error" & Err.Number & ": " & Err.Description, vbExclamation, "Cannot Open Report!"
End If
Resume Exit_Handler
End Sub
Проблема, с которой я столкнулся, заключается в том, что независимо от того, что я пытаюсь сделать, отчет никогда не фильтрует записи на основе оператора WHERE, созданного вышеуказанной подпрограммой.При попытке отладки выдается:
Если введены две даты: ([ClosingDate] >=#04/01/2019#) AND ([ClosingDate] <= #05/25/2019#)
Если введена одна дата: ([ClosingDate] >=#05/13/2019#)
Это мне кажется правильным, но это не фильтрация.Какого черта я делаю не так?
РЕДАКТИРОВАТЬ: Я должен отдать должное человеку, который написал оригинальную рутину, но я не могу на всю жизнь найти, где я ее получил.Сожалею!Но кто бы ни был, кто первоначально написал рутину, СПАСИБО!