Text aus String auslesen, splitten und danach suchen

Ilona85

Mitglied
Hallo ihr Lieben.
Ich brauch dringend eure Hilfe: Ich moecht nach Eintraegen in einer MySql - DB suchen. Wenn ich beispielsweise nach Deskriptoren suche, koennen moeglicherweise mehrere Deskriptoren zu einem Buch vorhanden sein, die in der DB durch Beistriche getrennt sind. Ich habe nun eine suchForm, wenn nach Deskriptoren gesucht wird, lade ich den lib_des-Eintrag in eine unsichtbare Textbox (svSearch), und weise deren Inhalt einem String (recdata) zu. Dann lese ich die Woerter einzeln aus und schreibe diese in einen weiteren String (deslibText). Das Problem ist, dass ich beim Ausfuehren keine Fehlermeldung bekomme, sondern sich das Programm einfach aufhaengt, bzw. etwa 15 min. lang nicht reagiert..
Ich fuege im folgenden den verwendeten Code ein:

Code:
Dim deslibText() As String
Dim recdata As String
Dim i As Integer
 
If Combo1.Text = "Descriptores" Then
        txtSearch.Visible = True
        svSearch.Visible = False
        Set svSearch.DataSource = rslib
        svSearch.DataField = "lib_des"
        recdata = svSearch.Text
        
        Do Until Len(recdata)
            deslibText = Split(recdata, ",")
            For i = 0 To UBound(deslibText)
                rslib.Find ("deslibtext(i) = '" & txtSearch.Text & "'")
            Next i
        Loop
    End If

Weiss jemand, wo der Fehler liegt..
 
Hallo Ilona85!
Ilona85 hat gesagt.:
Code:
        Do Until Len(recdata)
            deslibText = Split(recdata, ",")
            For i = 0 To UBound(deslibText)
                rslib.Find ("deslibtext(i) = '" & txtSearch.Text & "'")
            Next i
        Loop

Weiss jemand, wo der Fehler liegt..
Ja. Du hast da eine Endlosschleife programmiert. Die Bedingung nach dem Do Until hat immer den gleichen Wert denn dieser hängt ja nur von der Variablen recdata ab und die ändert sich in der Schleife nicht. Dann wird die Schleife auch nur betreten wenn der Ausdruck Len(recdata) falsch ist und das ist nur der Fall wenn die Länge von recdata 0 ist. Außerdem verwendest du deslibtext und das i in der Schleife ja gar nicht (ist nur als String enthalten)

Wenn ich richtig verstehe was du willst, könntest du es z.B. einfach so machen:
Code:
Dim descriptor as Variant

for each descriptor in Split(recdata, ",")
   rslib.Find (descriptor & " = '" & txtSearch.Text & "'")
next
Evtl. solltest du in der Schleife noch prüfen ob descriptor <> "" ist.

Gruß
 
Vielen Dank fuer dir rasche Antwort, dafuer lieb ich dieses Forum.. Ich hab jetzt nur noch das Problem, dass wenn ein Eintrag gefunden wird, alle zugehoerigen Merkmale angezeigt werden sollen:

Code:
rslib2.Open "Select * from libro where lib_autins = '" & txtSearch.Text & "' OR lib_tit = '" & txtSearch.Text & "' OR lib_lugpb = '" & txtSearch.Text & "' OR lib_autind = '" & txtSearch.Text & "' OR lib_autcol = '" & txtSearch.Text & "' order by lib_regnr ", connlib, adOpenDynamic, adLockOptimistic
wie bau ich denn jetzt die Variable deskriptor in den Sql-Code ein..
 
Also ich kenne natürlich nicht das Layout deiner Tabelle(n) in der Datenbank. Hast du denn einen primären Schlüssel in der Tabelle so das du den Eintrag eindeutig identifizieren kannst (die ISBN vielleicht)? Die könntest du benutzen um den Eintrag wiederzufinden.

Evtl. solltest du dein Problem noch etwas detaillierter beschreiben. Vor allem wie die Tabellen in der DB aussehen.

Soweit ich das jetzt verstanden habe, willst du alle Einträge (von Büchern) nach einem bestimmten Deskriptor durchsuchen (wobei ungünstigerweise die Deskriptoren in einer Spalte mit Komma getrennt statt in einer eigenen Tabelle stehen) und dann auflisten.

Gruß
 
Zurück