PDA

Vollständige Version anzeigen : Listbox


ehbrecht
08.09.2003, 10:17
Moin,

ist es möglich einer Listbox ein Recordset als Datenquelle zu übergeben ?

strausto
08.09.2003, 10:25
Public Function test()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = DBEngine(0)(0)
Set rs = db.OpenRecordset("Tabelle1")
Forms(0).Liste.RowSource = rs.Name
End Function

genschman
08.09.2003, 10:38
@ Torsten und OffTopic:
Glückwunsch zur "Beförderung" :winner: :lachen:

ehbrecht
08.09.2003, 10:43
Hallo Thorsten,

es gibt zwar keine Fehlermeldung, aber meine Listbox bleibt leer.
Hier Codeauszug:

Private Sub Modul_Suchmaske_DatenquelleErstellen(Optional Bedingung As String)
Dim tempy As Recordset
Dim SQL_Statement As String
Dim abf_name As String
Dim QDF As QueryDef
Dim i, j As Long
i = 1
SQL_Statement = "SELECT tbl_kunden.id, tbl_ICNVDGW_Vertriebsbezirke.id_vbez, tbl_ICNVDGW_Regionen.Region, tbl_tka.Gruppe," & _
" tbl_abrsystem.Abrechnungssystem, tbl_kunden.Typ, tbl_kunden.Kat, tbl_kunden.Betten, tbl_kunden.Name," & _
" tbl_kunden.PLZ, tbl_kunden.Ort, tbl_kunden.Straße, tbl_kunden.Telefon, tbl_kunden.Telefax," & _
" tbl_kunden_typ.Kürzel, tbl_kat.Kat, tbl_tka.TKA, tbl_kunden_Betreuung.Beschreibung, tbl_kunden_PSA_Panter.Typ," & _
" tbl_kunden_PSA_Panter.Betreuungsart, tbl_kunden.KSA_Panter, tbl_ICNVDGW_Mitarbeiter.Nachname, tbl_kunden_Betreuung.Kürzel" & _
" FROM (((((((((((tbl_kunden LEFT JOIN tbl_kunden_tka ON tbl_kunden.id = tbl_kunden_tka.id) LEFT JOIN tbl_tka ON tbl_kunden_tka.id_tka = tbl_tka.id_tka)" & _
" LEFT JOIN tbl_kunden_abrsystem ON tbl_kunden.id = tbl_kunden_abrsystem.id) LEFT JOIN tbl_abrsystem ON tbl_kunden_abrsystem.id_abrsystem = tbl_abrsystem.id_abrsystem) LEFT JOIN tbl_kunden_typ ON tbl_kunden.Typ = tbl_kunden_typ.id_kunden_typ) LEFT JOIN tbl_kat ON tbl_kunden.Kat = tbl_kat.kat_id)" & _
" LEFT JOIN tbl_kunden_Betreuung ON tbl_kunden.Betreuung = tbl_kunden_Betreuung.Betreuung_id) LEFT JOIN tbl_kunden_PSA_Panter ON tbl_kunden.KSA_Panter = tbl_kunden_PSA_Panter.KSA_id) LEFT JOIN tbl_ICNVDGW_Vertriebsbezirke ON tbl_kunden.id_vbez = tbl_ICNVDGW_Vertriebsbezirke.id_vbez)" & _
" LEFT JOIN (tbl_ICNVDGW_Mitarbeiter_AM LEFT JOIN tbl_ICNVDGW_Mitarbeiter ON tbl_ICNVDGW_Mitarbeiter_AM.id_mitarbeiter = tbl_ICNVDGW_Mitarbeiter.id_mitarbeiter)" & _
" ON tbl_ICNVDGW_Vertriebsbezirke.id_am = tbl_ICNVDGW_Mitarbeiter_AM.id_mitarbeiter) LEFT JOIN tbl_ICNVDGW_Regionen ON tbl_ICNVDGW_Vertriebsbezirke.id_region = tbl_ICNVDGW_Regionen.id_region)"
' Benutzerdefinierte Gruppen werden extra behandelt, da es hier eine 1 zu n Verbindung besteht.
If ([Forms]![F_Suchmaske]![def_gruppen].Value <> "Alle") Then
SQL_Statement = SQL_Statement & " LEFT JOIN tbl_kunden_definierte_Gruppierungen ON tbl_kunden.id = tbl_kunden_definierte_Gruppierungen.Kunden_id"
End If
If (Not (IsMissing(Bedingung))) Then SQL_Statement = SQL_Statement + Bedingung
SQL_Statement = SQL_Statement & " ORDER BY " & getSortierung()
setCurrentSQLstring (SQL_Statement)

Set tempy = CurrentDb.OpenRecordset(getCurrentSQLstring())

tempy.MoveFirst
tempy.MoveLast
tempy.MoveFirst
i = 0
Do While (Not tempy.EOF)
i = i + tempy.Fields("Betten")
tempy.MoveNext
Loop
tempy.MoveFirst
[Forms]![F_Suchmaske]![alle].RowSource = tempy.Name
[Forms]![F_Suchmaske]![Treffer].Value = "Suchergebnis enthält " & tempy.RecordCount & " Häuser mit " & i & " Betten"
tempy.close
End Sub

MarioR
08.09.2003, 10:56
Hallo,

weis doch den SQL-String gleich dem Listenfeld als Datenquelle zu.

[Forms]![F_Suchmaske]![alle].RowSource = getCurrentSQLstring()


Denn ob man einem Listenfeld direkt ein Recordset zuweisen kann, wage ich zu bezweifeln (lass mich aber auch vom Gegenteil überzeugen ;) ).

ehbrecht
08.09.2003, 11:00
Leider ist die Länge eines SQL-Strings begrenzt,
ansonster aber gute Idee.

MarioR
08.09.2003, 11:33
Vielleicht ist das noch eine Idee:

Lt. Hilfe (A97) ist es auch möglich, der Eigenschaft "Herkunftstyp" eine benutzerdefinierte Funktion zuzuweisen. Diese muss bestimmte Argumente akzeptieren und halt die Spaltenwerte zurückgeben.

Innerhalb der Funktion könntest Du dann auf Dein Recordset zugreifen. Dazu müsstest Du allerdings Dein Recordset nicht in der geposteten Funktion sondern global definieren und öffnen. Sonst hat Access nur noch mit sich zu tun, wenn das Recordset laufend geöffnet und geschlossen wird.

Morli
08.09.2003, 11:58
Da ich ein A97er bin sei mir die Frage erlaubt, was sich hinter
setCurrentSQLstring (SQL_Statement)
und
Set tempy = CurrentDb.OpenRecordset(getCurrentSQLstring ()) verbirgt!

Gibt Dir denn Dein Recordset überhaupt Werte wieder? Die Übergabe des Recordsets als RowSource funktioniert bei mir zumindest einwandfrei. Wenn aber Dein Recordset leer sein sollte, ist natürlich im Listenfeld nichts zu erwarten.

Morli

MarioR
08.09.2003, 12:09
<b>Auszug Hilfe A97:</b>
Die Name-Eigenschaft eines Recordset-Objekts, das mit einer SQL-Anweisung geöffnet wurde, entspricht den ersten 256 Zeichen der SQL-Anweisung.


Meine Zweifel bezüglich Recordset als Datenquelle bleiben. ;)

ehbrecht
08.09.2003, 12:25
Hallo Mario,

bei getCurrentSQLstring() und setCurrentSQLstring()
handelt es sich um öffentliche Funktionen (meine eigenen)
die die Werte von globalen Variablen setzen bzw, lesen.

Das Recordset ist nicht leer.

Nur die Listbox zeigt los nixos