Access: vom einzelnen Datensatz abhängige kombifeldeinträge
Will in einem Formular alle modelle (z.B Jackenmodelle) mit verschiedenen Eigenschaften anzeigen lassen.
Das klappt.
aber wie kann ich darin ein Kombifeld (z.B. Farbe) haben, das dem User nur die jeweils (vom Modell abhängigen) möglichen Farben anzeigt?
Antwort schreiben
Antwort 1 von lleopard vom 26.02.2020, 13:03 Options
Hallo Mike,
das ist doch ganz einfach...
& eigentlich nur die Frage wie du es darstellen willst!
zB kannst du doch wiederum ein Kombifeld anlegen. Beschreibung Farbe zB.
Erstmal stellst du die Eigenschaft sichtbar auf False.
Dann, wenn der User/Client ein Model ausgesucht hat, prüfst du ob es zu diesem Model unterschiedliche Einträge für die Farbe gibt. Das setzt voraus, daß es zu jedem Model einen Eintrag gibt (also pro Model und Farbe eine Zeile in der Quelltabelle)
Dein Suchstring sähe dann so aus:
Kombifeld Model: "Jacke Velours von xy"
Nun schaust du nach wieviele Modelle in deiner Tabelle stehen.
dim ssq as String
dim Suchstring as String
Suchstring = Kombifeld.Value
ssql = "Select * FROM [Quelle] WHERE Model ='" & Suchstring & "'"
dim dbs as dao.Database
dim rs as dao.Recordset
dim cc as long, Ergebnis as string
Ergebnis = ""
set dbs = Currentdb
set rs = dbs.OpenRecordset (ssql)
rs.movelast
cc = rs.RecordCount
if cc = 0 Then Exit Sub 'Keine Einträge also raus
Farbe.Visible = true 'Wenn es also Einträge gibt, Farbkombifeld einblenden
'So, und nun gehen wir die Datensätze alle durch:
do While rs.eof = false
Ergebnis = Ergebnis & rs!Farbe & ";"
rs.movenext
loop
'Wenn die schleife beendet ist, übergeben wir die Farbeinträge an das Kombifeld Farbe:
Farbe.Rowsource = Ergebnis
'Und beenden alle geöffneten Verweise:
set dbs = Nothing
rs.Close
Set rs = Nothing
Und das hinterlegst du als Ereignis nach Aktualisierung bei dem Kombifeld Model.
Gruß leo
Antwort 2 von lleopard vom 26.02.2020, 13:04 Options
dim ssq as String
war falsch,... das l vergessen.
also:
dim ssql as String
dann sollte es passen! :-)
Antwort 3 von lleopard vom 26.02.2020, 13:06 Options
und nach
rs.movelast
cc = rs.Recordcount
mußt du noch hinzufügen, bevor es in die Schleife geht:
rs.movefirst
Sonst findet er nix,....
Lauter Fehler... mann o mann
Antwort 4 von lleopard vom 26.02.2020, 13:07 Options
möglicherweise löst rs.movelast bei 0 Einträgen auch einen Fehler aus...
Du kannst auch gleich nach
set rs...
schreiben:
if rs.bof then exit sub
Das sollte das Problem beheben.
...
tsts
Am besten schreibst du aber unter Sub ...
On Error Resume Next
Das hebelt diese Art Fehler aus.