1

私は以前に尋ねられたすべての質問に目を通し、解決策を試しましたが、役に立たなかったので、ここに私のジレンマがあります. 最初は素晴らしかった Allenbrowne の検索クエリを使用しました。ただし、検索条件に追加したかったのですが、これも行ったので、初めて検索したときに、探していた結果が得られました。別のコードを使用して、すべての検索基準を削除し、フォームのフィルターを解除します (分割フォーム)。繰り返しますが、すべてが機能します。ここで、同じ異なるパラメーターを使用してもう一度検索したいと思います。今回は、クエリ式に余分な ) があることを示す実行時エラー 3075 が表示されます。この余分な ) がどこにあるかを確認するためにクエリを調べましたが、役に立ちませんでした。コードは次のとおりで、Me.Filter = strWhere でエラーになります。また、検索画面をクリアして新しい検索を開始したい場合に、リセット フィルターを提供しました。どんな助けでも本当に感謝します。

Option Compare Database
Option Explicit

Private Sub cmdFilter_Click()


    Dim strWhere As String                  'The criteria string.
    Dim lngLen As Long                      'Length of the criteria string to append to.

    '***********************************************************************
    'Look at each search box, and build up the criteria string from the non-blank ones.
    '***********************************************************************

    If Not IsNull(Me.txtCustID) Then
        strWhere = strWhere & "([Customer_ID] = " & Me.txtCustID & ") AND "
    End If

     If Not IsNull(Me.txtJobID) Then
        strWhere = strWhere & "([Job_ID] = " & Me.txtJobID & ") AND "
    End If

     If Not IsNull(Me.txtName) Then
        strWhere = strWhere & "([Name] Like ""*" & Me.txtName & "*"") AND "
    End If

    If Not IsNull(Me.TxtPostcode) Then
        strWhere = strWhere & "([Postcode] = ""*" & Me.TxtPostcode & "*"") AND "
    End If

    If Not IsNull(Me.txtCompany) Then
        strWhere = strWhere & "([CompanyName] Like ""*" & Me.txtCompany & "*"") AND "
    End If

    If Not IsNull(Me.txtLocation) Then
        strWhere = strWhere & "([Location] Like ""*" & Me.txtLocation & "*"") AND "
    End If

    If Not IsNull(Me.CboStatus) Then
        strWhere = strWhere & "([Status] = " & Me.CboStatus & ") AND "
    End If

    If Not IsNull(Me.CboSource) Then
        strWhere = strWhere & "([EnquirySource] = " & Me.CboSource & ") AND "
    End If

        'See if the string has more than 4 characters (a trailng " AND ") to remove.
    lngLen = Len(strWhere) - 4
    If lngLen <= 0 Then     'Nah: there was nothing in the string.
        MsgBox "No criteria", vbInformation, "Nothing to do."
    Else                    'Yep: there is something there, so remove the " AND " at the end.
        strWhere = Left$(strWhere, lngLen)
        'For debugging, remove the leading quote on the next line. Prints to Immediate Window (Ctrl+G).
    Debug.Print strWhere

        'Finally, apply the string as the form's Filter.
        Me.Filter = strWhere
        Me.FilterOn = True
    End If
End Sub

Private Sub cmdReset_Click()
    'Purpose:   Clear all the search boxes in the Form Header, and show all records again.
    Dim ctl As Control

    'Clear all the controls in the Form Header section.
    For Each ctl In Me.Section(acHeader).Controls
        Select Case ctl.ControlType
        Case acTextBox, acComboBox
            ctl.Value = ""
        Case acCheckBox
            ctl.Value = False
        End Select
    Next

    'Remove the form's filter.
    Me.FilterOn = False

End Sub
4

1 に答える 1

1

でこれctl.Value = ""を見cmdReset_Click()ますか?コントロールをクリアすると、そのうちの 1 つが長さ 0 の文字列になってしまうと思いますが、フィルターを構築する際のテストは、長さ 0 の文字列ではなく null を対象としているため、おそらく数値の 1 つがですsomefield=<blank>。試す:

 ctl.Value = Null

余談ですが、equals にワイルドカードを使用しても意味がありません。

strWhere = strWhere & "([Postcode] = ""*" & Me.TxtPostcode & "*"") AND "

次のようにする必要があります。

strWhere = strWhere & "([Postcode] Like ""*" & Me.TxtPostcode & "*"") AND "

または

strWhere = strWhere & "([Postcode] = """ & Me.TxtPostcode & """) AND "
于 2012-08-14T16:19:06.723 に答える