Mit Recordset ein Listenfeld füllen

Hallo,

ich stehe ‚auf dem Schlauch‘ und brauche jemanden, der mir ‚runter hilft‘. Es geht um die Manipulation des Listenfeldes in einem Access-Formular.

Ich möchte das Listenfeld mit einem Recordset füllen, das ich zuvor erst aufgebaut (=definiert) und dann mit .Filter = … gefiltert habe. Recordset und dessen Filterung sind erledigt.
Aber wie bekomme ich diese Sätze in das Listenfeld meines Formulars?

Ich würde mich sehr über Hilfestellung freuen, da ich mich in meinen Gedanken verrannt, verlaufen habe.

Danke und Gruß
Tronicrot

Hi,

einfach dort unter „Datensatzherkunft“ deine Tabelle oder
Abfrage oder SQL-String eintragen
viel Erfolg
Thomas

Guten Morgen, Thomas,
und vielen Dank für deinen Vorschlag.

Der Recordset (aus einer Abfrage) muss gefiltert werden, und die Einstellung des Filters ist von der Situation abhängig. Wie bekomme ich den Filter mit den für eine bestimmte Datenkostellation richtigen Kriterien in die Datensatzherkunft ? Für eine statische Abfrage ist dein Vorschlag prima, ich aber muss den Filter manipulieren, unterschiedlich ‚laden‘ können. Wie geht das in der Datensatzherkunft ?

Deshalb wollte ich in VBA ausgeweichen, wo ich auf ein Recordset ganz einfach einen Filter anwenden kann, der mit zuvor ermittelten Werten beschickt wurde. Dann aber hapert es daran, dieses gefilterte Ergebnis in die Datensatzherkunft zu bekommen.

Bitte noch ein wenig Hilfe,

Gruß Tronicrot

du holst ja die Daten aus einer Tabelle.
Auf die kannst ja per SQL zugreifen
Du kannst also einfach unter Datenherkunft per VBA eintrage:
Me.Recordset=„Select * FrOM Temp WHERE Nr=123“

so in etwa…
Thomas

Danke sehr für dein Mitarbeiten an meinem Problem.

In deinem Beispiel: Die ‚123‘ muss nach der ‚Schuhgröße‘ der gefundenen Person gesetzt werden. Wie bekomme ich deine ‚123‘ durch die Schuhgröße der jeweiligen Person ersetzt?

Ich freue mich über deine Antworten. Mein Insistieren zielt auf eine Lösung, nicht auf Ablehnung von Vorschhlägen.

Gruß Tronicrot

da kenne ich deine Anwendung zu wenig
Vermutlich ist die Schuhgröße in einer Variablen gespeichert

dim strSchugr as string

„Select * From Schuhe WHERE Size=’“ & strSchugr & „’“

wenn noch fragen sind schreib direkt ne mail an mich
[email protected]
bin jetzt dann aber nachher weg bis heute abend

Thomas

Vielen Dank, Thomas, du hast mir wirklich und wirksam ‚auf die Sprünge geholfen‘!
Ich habe in der Zwischenzeit auch die Notation den Fall erprobt, dass man mit einer LIKE-Klausel in einem Feld suchen muss.

Falls andere dasselbe Problem lösen müssen, hier der Eintrag im Eigenschaftsfenster meines Listenfeldes:

Dieser Befehl lässt in dem Listenfeld nur die Sätze aus der angegebenen Tabelle erscheinen, in deren feldH irgendwo die Zeichenfolge enthalten ist.

Ich bin’s zufreiden und bedanke mich nochmal.

Gruß Tronicrot

Moin, moin!

Da gibt es diese Möglichkeit
In dem Beispiel wird haben das Recordset „rs“ und das Listenfeld „NameDeinesListenfeldes“ vier Felder:

rs.MoveFirst
h = 1
With UserForm1
Do Until rs.EOF

.NameDeinesListenfeldes.AddItem (rs.Fields(0))
.NameDeinesListenfeldes.Column(1, h) = rs.Fields(1)
.NameDeinesListenfeldes.Column(2, h) = rs.Fields(2)
.NameDeinesListenfeldes.Column(3, h) = rs.Fields(3)
h=h+1
rs.MoveNext
Loop

Wenn Du eine Spalte zu füllen hast kannst Du die Zeilen mit „Column“ und den Zähler h einfach weglassen

Ingo

Danke für deine Antwort, Ingo.
Noch eine Frage dazu: Was muss im Eigenschaftenblatt unter Herkuftstyp eingetragen werden? als Eintrag verursacht einen Fehler.

Gruß
Tronicrot

>Was muss im Eigenschaftenblatt unter
>:Herkunftstyp eingetragen werden? als >Eintrag verursacht einen Fehler.
„Wertliste“ - Dein Programm füllt die Listbox ja mit einer Liste von Werten.

Ingo

hallo,
allgemin gilt: man kann in Access einem ListBox kein (leider) bereits geöffnetes Recordset zuweisen.

  1. Lösungsvariante:
    ein ADO.Recordset hat die coole Methode „GetString“
    wir haben dann eine Variable:

Dim lstStrFill as String

#Ein ADO.Recordset rs öffnen und dann:

lstStrFill=rs.GetString(adClipString, ColumDelimeter:=";", _
RowDelimeter:=";")

'Es entsteht eine Liste mit Einträgen, getrennt durch „;“

Form.Controls(„DeineListBox“).RowSourceType=„Value List“
Form.Controls(„DeineListBox“).DeineListBox.RowSource=lstStrFill
rs.Close

Einträge in LstBox löschen (alle) ist easy:
DeineListBox.RowSource=""

Einschränkungen bei dieser Methode: RowSource kann nicht länger als 2048 Zeichen sein.
2. Variante:
Die von anderen Kollegen bereits beschriebene Methode mit „AddItem“
Ich hoffe, es hilft
AndyWawa

Hallo Tronicrot,

das Geschikteste ist, im Formularentwurf den Herkunftstyp der Listbox auf Tabelle/Abfrage zu setzen und im Code das SQL-Statement so zusammenzubasteln, dass es dir die gewünschten Einträge für die Listbox ausgibt und dann mit (angenommen deine Variable für das SQL heißt sSQL und deine Listbox LBTest) :

LBTest.RowSource = sSQL

der Listbox das SQL-Statement zuzuweisen.

Wenn du es unbedingt mit deiner Recordset-Filter-Lösung machen willst, durchlauf das Recordset, häng dabei in einer String-Variable die Einträge mit Semikolon getrennt aneinander und weise diese Variable als RowSource zu, Herkunftstyp der Listbox muss dann Wertliste sein.

Viel Erfolg

Phoenica

Habt a l l e vielen Dank, mein Problem ist mit eurer Hilfe gelöst, die Anwendung funktioniert wie gewünscht!

Reaktionen zu erfahren wie die von euch allen, macht Freude und bestärkt mich, meinerseits anderen zu helfen.

Gruß Tronicrot

Hallo Tronicrot,

melde mich wegen Urlaub erst jetzt.

Die Antwort ist relativ einfach:
In der Eigenschaft DATENSATZHERKUNFT wird die SQL-Anweisung hineinkopiert. Die SQL-Anweisung kannst Du Dir in einer Abfrage holen.

Wenn Dir das geholfen hat, bitte einen kurzen Funk.

Gruß Reinhold
Datenbankentwicklung
und IT Trainer

Hallo,

ich stehe ‚auf dem Schlauch‘ und brauche jemanden, der mir
‚runter hilft‘. Es geht um die Manipulation des Listenfeldes
in einem Access-Formular.

Ich möchte das Listenfeld mit einem Recordset füllen, das ich
zuvor erst aufgebaut (=definiert) und dann mit .Filter = …
gefiltert habe. Recordset und dessen Filterung sind erledigt.
Aber wie bekomme ich diese Sätze in das Listenfeld meines
Formulars?

Ich würde mich sehr über Hilfestellung freuen, da ich mich in
meinen Gedanken verrannt, verlaufen habe.

Danke und Gruß
Tronicrot

Ich danke auch dir, Reinhold, für deine Hilfe. Mein Problem ist inzwischen anders gelöst.
Das Einfügen der SQL-Anweisung in die Datensatzherkunft des Eigenschaftsfeldes geht bei meiner Aufgabe nicht, weil ich die Abfrage - abhängig vom aufrufenden Satz - manipulieren muss.
Habe inzwischen gelernt: Dem Listenfeld per VBA-Code die SQL-Anweisung zuweisen. Diese kann ich vorher manipulieren, also auf meinen Bedarf und abhängig vom aufrufenden Datensatz zurecht stutzen.

Allen großen Dank für Mitdenken und Lösungen.
Gruß Tronicrot