Синтаксические ошибки DocmdApplyFilter - PullRequest
0 голосов
/ 30 апреля 2019

В моей форме доступа я получаю

               Run-time error'3705:

Синтаксическая ошибка в выражении запроса даты '((([Дата покупки]> = ## И [Дата покупки] <= ##)) '. </p>

всякий раз, когда я запускаю свой код без полей Me.TxtPurchaseDateTo и Me.TxtPurchaseDateTo вместо поля msg, которое должно быть запущено. Кроме того, я получаю диалоговое окно «Ввод значения параметра»выскакивает, когда я нажимаю кнопку «Очистить» с отображаемыми данными или без них. Чтобы очистить форму данных, я должен нажать пробел, находясь в поле ввода диалогового окна «Ввод значения параметра», чтобы очиститьформы. Если я нажимаю «Отмена», я получаю сообщение об ошибке 2501 «Во время выполнения» действие ApplyFilter было отменено, и я перехожу на свой лист кода с подсвеченной «задачей DoCmd.ApplyFilter», если я отлаживаю ошибку.

Я удалил несколько частей кода, перепроверил орфографию и интервал

Option Compare Database


 Private Sub CmdSearch_Click()
 'Search button

    Call Search
    End Sub
        Sub Search()
        Dim strCriteria, task As String

    Me.Refresh
If IsNull(Me.TxtPurchaseDateFrom) Or IsNull(Me.TxtPurchaseDateTo) Then
    MsgBox "Please enter the date range", vbInformation, "Date Range 
Required"
    Me.TxtPurchaseDateFrom.SetFocus
Else
    strCriteria = "([Date of Purchase] >= #" & Me.TxtPurchaseDateFrom & "# 
And [Date of Purchase] <=#" & Me.TxtPurchaseDateTo & "#)"
    task = "select * From TblPurchases Where( " & strCriteria & ") order 
by [Date of Purchase] "
    DoCmd.ApplyFilter task
    'Me.TxtTotal = FindRecordCount

End If


End Sub

    Private Sub CmdClear_Click()

    Dim task As String

    Me.TxtPurchaseDateFrom = ""
    Me.TxtPurchaseDateTo = ""
    task = "select * from TblPurchases where PrimaryKey is null"
    DoCmd.ApplyFilter task

     'Me.TxtTotal = FindRecordCount



End Sub

    Private Sub CmdShowAll_Click()
Dim task As String

    Me.TxtPurchaseDateFrom = ""
    Me.TxtPurchaseDateTo = ""
    task = "select * from TblPurchases order by [Date of Purchase] "
    Me.RecordSource = task
     'Me.TxtTotal = FindRecordCount

End Sub

Я ожидаю, что если я просто откажусь от диалогового окна, форма должна остаться на экране. Также если "от"и поля "t / o" не заполнены. Я должен получить результаты MsgBox.

Я не уверен, в чем заключается синтаксическая ошибка, связанная с "задачей DoCmd.ApplyFilter". Какую ошибку я не вижу?

1 Ответ

0 голосов
/ 30 апреля 2019

Ваши критерии не могут быть полным предложением SQL, только критерии:

strCriteria = "[Date of Purchase] >= #" & Me.TxtPurchaseDateFrom & "# And [Date of Purchase] <= #" & Me.TxtPurchaseDateTo & "#"
DoCmd.ApplyFilter strCriteria

Вы можете использовать Nz , чтобы избежать ошибок в пустых текстовых полях:

strCriteria = "[Date of Purchase] >= #" & Nz(Me!TxtPurchaseDateFrom.Value, Date) & "# And [Date of Purchase] <= #" & Nz(Me!TxtPurchaseDateTo.Value, Date) & "#"
DoCmd.ApplyFilter strCriteria

Или:

If IsNull(Me!TxtPurchaseDateFrom.Value) Then
    strCriteria = "[Date of Purchase] <= #" & Nz(Me!TxtPurchaseDateTo.Value, Date) & "#"
Else
    strCriteria = "[Date of Purchase] >= #" & Nz(Me!TxtPurchaseDateFrom.Value, Date) & "# And [Date of Purchase] <= #" & Nz(Me!TxtPurchaseDateTo.Value, Date) & "#"
End If
DoCmd.ApplyFilter strCriteria
...