PDA

Vollständige Version anzeigen : Suchergebnisse in ein Listenfeld ausgeben???


Michael2050
02.10.2002, 09:53
Hallöchen,

ich habe ein kleines Problem mit einer Suchfunktion.
Die Suchfunktion funktioniert eigentlich, aber ich möchte die Ergebnisse meiner Suche in einen Listenfeld ausgeben.

mein Code:
Private Sub Suchen_Click()
Dim firmavar As String
Dim strvar As String
Dim plzvar As String
Dim ortvar As String
Dim idvar As String

If Len(Me.Suche_Firma.Value) > 0 Then
firmavar = Me.Suche_Firma.Value
Else
firmavar = ""
End If
If Len(Me.Suche_Strasse.Value) > 0 Then
strvar = Me.Suche_Strasse.Value
Else
strvar = ""
End If
If Len(Me.Suche_plz.Value) > 0 Then
plzvar = Me.Suche_plz.Value
Else
plzvar = ""
End If
If Len(Me.Suche_Ort.Value) > 0 Then
ortvar = Me.Suche_Ort.Value
Else
ortvar = ""
End If
If Len(Me.suche_id.Value) > 0 Then
idvar = Me.suche_id.Value
Else
idvar = ""
End If
Me.RecordSource = "SELECT* FROM adressen1 Where Firma1 LIKE '" + firmavar + "*' AND Strasse LIKE '" + strvar + "*' AND PLZ LIKE '" + plzvar + "*' AND Ort LIKE '" + ortvar + "*' AND id LIKE '" + idvar + "*';"
End Sub

Zur Zeit werden die Ergebnisse in den Textfeldern:
Firma1, Strasse, PLZ, Ort und Id ausgegeben.
Ich möchte die Ergebnisse in einem Listenfeld ausgegeben haben.
Wie kann ich das machen ohne einen komplett neuen Code schreiben zu müssen?

Bitte helft mir, Danke im Voraus.

Thomas Braun
02.10.2002, 10:03
Ein wenig programmieren musst du schon noch - Probier mal:
Dim rsListe As DAO.RecordSet
Dim txtListe As String
Dim db As DAO.Datebase

txtList =""
Set db = CurrentDB
Set rsListe = db.OpenRecordSet(' ...dein sql-
String)

If rsListe.RecordCount > 1 then
rsListe.MoveFirst
Do While Not rsListe.EOF
txtList = txtListe & ";" rsListe![Feld1]
' das für alle Felder
rsListe.MoveNext
Loop
End If

' Listenfeld: Datenherkunft=Wertliste, Spaltenzahl vorher einstellen
DeinListenFeld.RowSource = txtListe

Set db = Nothing
Set rsListe = Nothing

Viel Spaß

Michael2050
02.10.2002, 10:21
Danke erstmal für Deine Mühe, aber was verstehst Du unter einer Wertliste?
Also ich bin mit Access und VBA total unerfahren.

Thomas Braun
02.10.2002, 10:36
Für deine Unerfahrenheit hast du aber eine nette Suche programmiert :-) Ich würd noch das eine oder andere umstallen, aber naja ..
Folgende Code Zeilen brauchst du noch:

DeinListenFeld.RowSourceType = "Value List"
DeinListenFeld.ColumnCount = 'Anzahl der Spalten
DeinListenFled.ColumnWidths = "x cm;y cm;z cm ..."

oder du stellst die Sachen fest bei den Eigenschaften des Listenfeldes ein.

Michael2050
02.10.2002, 10:48
Ich habe jetzt alle Einstellungen getroffen.
Mir ist nur die Zeile txtList = txtListe & ";" rsListe![Feld1] unklar.
Du liest praktisch alle Felder in ein String ein.
Die Spalten werden die durch das Simikolon getrennt?
Ich hab das mal so geschrieben bin mir aber nicht sicher:
txtList = txtListe & ";" & rsListe![ID] & ";" & rsListe![FIRMA1] & ";" & rsListe![Strasse] & ";" & rsListe![PLZ] & ";" & rsListe![Ort]
Ist das so richtig oder bin ich auf dem falschen weg?

Es läuft soweit ohne Problem, nur es wird nichts im Listenfeld ausgegeben.

Thomas Braun
02.10.2002, 11:01
Ja, ist richtig. Die Einträge, die im Listenfeld dargestellt werden sollen, werden durch Semikolon(s ?) getrennt eingetragen. Dabei ist wichtig, dass auch eine Semikoloon einträgst, wenn keine Wert drin steht, da sonst die Spalten verrutschen.

Zur Sicherheit kannst du dir mal in einer Messagebox die Liste anzeigen lassen und schauen, wie sie in der Rohform aussieht.

Michael2050
02.10.2002, 11:06
Danke Dir es funktioniert, ich hatte nen kleinen Schreibfehler.

Michael2050
02.10.2002, 12:13
Ich habe ein neues Problem entdeckt.
Wenn rsListe.RecordCount zu groß wird, dann wird der String vom txtListe zu lang, wie kann ich an das Problem rangehen?

Ich dachte das man bei einer bst. Anzahl von Records den String txtListe ausgibt und von neuen anfängt aber man muß ja dann den "neuen" String von txtListe an den alten dranhängen --> das Problem der überlänge ist damit nicht gelöst.
Die Daten sollen ja alle gemeinsam in einem Listenfeld zum selben Zeitpunkt erscheinen.

Kann mir jemand helfen?

Morli
02.10.2002, 13:36
Hallo Michael2050,

warum gehst Du denn nicht einfach hin und übergibst Deinen über die Suchfunktion zusammengesetzten SQL-String dem Listenfeld als ROWSOURCE?

Also:

DeinListenfeld.RowSource = "SELECT* FROM adressen1 Where Firma1 LIKE '" + firmavar + "*' AND Strasse LIKE '" + strvar + "*' AND PLZ LIKE '" + plzvar + "*' AND Ort LIKE '" + ortvar + "*' AND id LIKE '" + idvar + "*';"

Gruß

Rainer

Michael2050
02.10.2002, 13:40
Das funktioniert aber leider nicht, da steht dann in der ersten Spalte, erste Zeile mein SQL String und sonst nichts weiter.

Morli
02.10.2002, 14:58
Du mußt natürlich auch den RowSourceType auf "Tabelle/Abfrage" einstellen!

Rainer