# Text aus String auslesen, splitten und danach suchen



## Ilona85 (23. Februar 2006)

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:


```
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..


----------



## deepthroat (24. Februar 2006)

Hallo Ilona85!





			
				Ilona85 hat gesagt.:
			
		

> ```
> Do Until Len(recdata)
> deslibText = Split(recdata, ",")
> For i = 0 To UBound(deslibText)
> ...


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:
	
	
	



```
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ß


----------



## Ilona85 (24. Februar 2006)

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:


```
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..


----------



## deepthroat (27. Februar 2006)

Also ich kenne natürlich nicht das Layout deiner Tabelle 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ß


----------

