2017-01-16 3 views
0

Ich habe ein Formular erstellt, in dem ein Mitarbeiter nach Name oder ID eines Kunden suchen kann. Ich versuche, die Möglichkeit hinzuzufügen, auch Kontrollkästchen mit "Kundentypen/Opportunity-Typen" zu aktivieren, um die Suchergebnisse weiter zu filtern. Ich bekomme Laufzeitfehler 3075 Jede Hilfe wird geschätzt.Wie aktualisiere ich diesen Code und erhalte Laufzeitfehler 3075 nicht?

Private Sub btnSearch_Click() 

'Code to show results based on keyword entered and checkbox selected 

    Dim strSearch As String 
    Dim strText As String 
    Dim NewBuild As String 
    Dim Winback As String 
    Dim Renewal As String 

    If IsNull(Me.txtSearch) Or Me.txtSearch = "" Then 
    MsgBox "You must enter a Name or ID to search!", vbOKOnly, "Keyword Needed" 
    Me.txtSearch.SetFocus 

    Else 

    If Me.chkNewBuild = True Then 
     NewBuild = "New Build" 
    End If 

    If Me.chkWinback = True Then 
     Winback = "Winback" 
    End If 

    If Me.chkRenewal = True Then 
     Renewal = "Renewal" 
    End If 

    strText = txtSearch.Value 
    strSearch = "SELECT * FROM qryPropertiesALL " _ 
    & "WHERE ((([OpportunityType] = " _ 
    & NewBuild & ")or ([OpportunityType] = " _ 
    & Winback & ") or ([OpportunityType] = " _ 
    & Renewal & ") AND (PropertyName like ""*" & strText & "*"") or (Property_ID like ""*" & strText & "*"")))" 
    Me.RecordSource = strSearch 


    End If 

End Sub 

Antwort

1

Try this:

Private Sub btnSearch_Click() 

'Code to show results based on keyword entered and checkbox selected 

    Dim strSearch As String 
    Dim strText As String 
    Dim NewBuild As String 
    Dim Winback As String 
    Dim Renewal As String 

    If IsNull(Me.txtSearch) Or Me.txtSearch = "" Then 
    MsgBox "You must enter a Name or ID to search!", vbOKOnly, "Keyword Needed" 
    Me.txtSearch.SetFocus 

    Else 

    If Me.chkNewBuild = True Then 
     NewBuild = "New Build" 
    End If 

    If Me.chkWinback = True Then 
     Winback = "Winback" 
    End If 

    If Me.chkRenewal = True Then 
     Renewal = "Renewal" 
    End If 

    strText = txtSearch.Value 
    strSearch = "SELECT * FROM qryPropertiesALL " _ 
    & "WHERE OpportunityType = '" _ 
    & NewBuild & "' or OpportunityType = '" _ 
    & Winback & "' or OpportunityType = '" _ 
    & Renewal & "' AND PropertyName like '" & strText & "' or Property_ID like '" & strText & "'" 

    Me.RecordSource = strSearch 

    End If 

End Sub 
+0

Auf einer Seite zur Kenntnis, empfehle ich den Verzicht auf all den zusätzlichen Klammern und Klammern, wenn möglich. Die Klammern sind nur notwendig, wenn im Feldnamen ein Leerzeichen steht. Es erleichtert die Fehlersuche in solchen Situationen erheblich. –

+0

@ Steve W Das hat das Problem gelöst - danke! Ich werde über Ihren Code schauen, um zu verstehen, warum das funktioniert, anstatt was ich hatte. Das einzige Problem ist, dass die Kontrollkästchen die Schlüsselwortsuche außer Kraft setzen, anstatt die Ergebnisse mit der Schlüsselwortsuche zu filtern. Irgendeine Idee, warum das der Fall sein könnte? Ich kann zusätzliche Details bei Bedarf bereitstellen. Nochmals vielen Dank für die Antwort. – New2This

+0

Denken Sie daran, wie und/oder Beziehungen funktionieren. Wenn in Ihrer WHERE-Klausel ein OR vorhanden ist, muss nur eines der Kriterien erfüllt sein, damit die Aussage wahr ist. In Ihrem Programm funktioniert die Verwendung mehrerer Checkbooks für dieselbe Abfrage möglicherweise nicht wie geplant. Könnten Sie stattdessen eine Optionsgruppe versuchen, die nur eines der drei Suchkriterien zulässt? –

Verwandte Themen