Fragmentsuche

Katzenkind

Mitglied
Ich habe jetzt bei meiner Suchfunktion eine Fragmentsuche eingebaut, funktioniert eigendlich ganz gut, bis auf das, das ich jetzt NUR mit Fragmenten suchen kann und keine einzelnen Wörter mehr, z.B. "Max Mustermann" kann ich suchen "Max" hingegen alleine nicht mehr. :suspekt:
Ich habe schon versuch eine If-Schleife zu machen mit:

"If suchen ="" Then
strSQL
End If"


Funktioniert leider nicht, also was soll ich tun damit beides funktioniert?

mfg Katzenkind

Mein Code:
Code:
 Public Sub sucheNamen(name As String)
Dim rs As ADODB.Recordset
Dim dummy As Long
Dim suche As String


    If name = "" Then Exit Sub
    'Mauszeiger wird zu Stundenglas
    Me.MousePointer = vbHourglass
    
    'Erstellt ein neues Recordset
    Set rs = New ADODB.Recordset

    'Suchfunktion
    'inStr sucht nach einem Leerzeichen und gibt dessen Position zurück
    suche = Mid(name, 1, InStr(1, name, " ") - 1)
    
    strSQL = "SELECT TOP " & txtMaxTreffer.Text & " * FROM namen WHERE Nachname LIKE '%" _
    & suche & "%' OR Vorname LIKE '%" & suche & "%'"

    'Recordset wird geoeffnet, ...
    rs.Open strSQL, con, adOpenDynamic, adLockPessimistic
    
    Me.Caption = "Namen, Gefunden: " & rs.RecordCount
    
    Call GridEinstellung

    dummy = 0

    Do While Not rs.EOF
        dummy = dummy + 1
        grdErgebnis.AddItem rs!ID & vbTab & rs!Vorname & vbTab & rs!Nachname, 1
        rs.MoveNext
        If dummy >= 200 Then Exit Do
    Loop
    
    'recordset wird beendet
    rs.Close
    
    'Mauszeiger wird wieder "normal"
    Me.MousePointer = vbDefault

End Sub
 
Hi Katzenkind,

also mir fallen zwei Ansätze ein. Der erste währe einfach zwei Suchdurchläufe zu machen. Der erste sucht die Datensätze mit "WHERE Nachname = 'irgendwas'". Wird bei dieser Suche nichts gefunden, dann wird mittels "WHERE Nachname LIKE '%irgendwas%'" gesucht.

Der zweite Ansatz nimmt Deine User in die Pflicht. Sie müssen dem Programm mitteilen, ob die Eingabe eine Wildcard suche ist. Z. B. ist die Eingabe dann Max*. Dann könnte Dir folgender Code weiterhelfen:
Code:
    suche = Mid(name, 1, InStr(1, name, " ") - 1)
    If InStr(suche, "*") > 0 Then
        suche = Replace(suche, "*", "")
        strsql = "SELECT TOP " & txtMaxTreffer.Text & _
                 " * FROM namen WHERE Nachname LIKE '%" & suche & "%' " & _
                 "OR Vorname LIKE '%" & suche & "%'"
    Else
        strsql = "SELECT TOP " & txtMaxTreffer.Text & _
                 " * FROM namen WHERE Nachname = '" & suche & "' " & _
                 "OR Vorname = '" & suche & "'"
    End If

maybe it helps
Das Orakel
 
Zurück