Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kein Auswahlmöglichkeit in einem Listenfeld mit Mehrfachauswahl

Begonnen von DerSolide, Juni 04, 2025, 11:59:34

⏪ vorheriges - nächstes ⏩

DerSolide

Hallo,

ich habe ein Listenfeld mit Mehrfachauswahl um den Namen eines bereits in der Datenbank enthaltenen Behälters in ein Textfeld zu übernehmen. Softwaretechnisch habe ich im Click-Ereignis die Möglichkeit, mehr als ein Feld auszuwählen ausgeschlossen. Mir ging es nur um die intuitivere Anzeigemöglichkeit mit der Checkbox gegenüber einem herkömlichen Listenfeld.

Problem:

Wenn ich von der Entwurfsansicht in die Formularansicht wechsle, klappt alles wunderbar.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Sperre/deaktiviere ich jetzt das Listenfeld (per VBA) im Zuge weiterer Dateneingaben in identisch aufgebauten Listboxen habe ich keinen Zugriff mehr auf die Einträge im Listenfeld, wenn ich es umgekehrt wieder entsperre/aktiviere.

Sie dürfen in diesem Board keine Dateianhänge sehen. und nach entsperren/aktivieren Sie dürfen in diesem Board keine Dateianhänge sehen.

Gehe ich wieder in die Entwurfsansicht und wechsle dann wieder in die Formularansicht funktioniert es wieder bis zur nächsten Sperre/Deaktivierung.

Hatte jemand schon einmal so ein Problem. Ich weiß, Listenfelder mit Mehfachauswahl sind nicht gerne gesehen, bieten sich in meinem Fall aber an.

Vielen Dank im Voraus.

Schöne Grüße,
Christian

Bitsqueezer

Hallo,

kann ich nichts zu sagen, weil ich Listboxen vermeide. Sie können nahezu immer durch Endlosformulare ersetzt werden.
Und für die Auswahl per Checkbox habe ich dazu auch eine Lösung, schau mal auf meiner Downloadseite unter "SelectRecordsV2".

Zum Testen wäre es sicher hilfreich, wenn Du eine Demodatenbankdatei hier hochlädtst, die das Problem demonstriert.

Gruß

Christian

Knobbi38

Hallo Christian,

das ist nicht einfach nur ein Listenfeld, sondern diese Art von Steuerelement wird an ein spezielles Feld in einer Tabelle gebunden, welches eine Mehrfachauswahl erlaubt und mit dem Nachschlageassistenten erstellt wird.
Erstens sind diese Nachschlagefelder verpönt, weil nicht kompatible, und zweitens ist es für deine Zwecke ungeeignet.

So eine gewünschte Optik mit Einfachauswahl und Checkboxen kann mit einem Unterformular im Endlosmodus simuliert werden. Da es so etwas nicht von der Stange gibt, mußt du das dann allerdings selber erstellen und programmieren.

Gruß Knobbi38

PS:
Ich sehe gerade, daß Christian dich schon auf sein Beispiel hingewiesen hat.





Bitsqueezer

Hallo Ulrich,

stimmt, das hatte ich übersehen.

Wenn man statt Mehrfachauswahl alles über "normale" Tabellenbeziehungen regelt, habe ich auch einen Ersatz für scheinbare Mehrfachauswahl-Felder auf meiner Downloadseite. "MultiValuedFields" ist ein Ersatz für so eine Mehrfachauswahl, bei der man keine Mehrfachauswahl-Felder mehr benötigt.

Gruß

Christian

Knobbi38

@christian:

Zitat von: Bitsqueezer am Juni 04, 2025, 13:09:01"MultiValuedFields" ist ein Ersatz für so eine Mehrfachauswahl, bei der man keine Mehrfachauswahl-Felder mehr benötigt.
Das verstehe ich nicht ganz. Wenn in Access ein Mehrfachauswahfeld per Assistent in eine Tabelle eingefügt wird, ist das automatisch ein "MultiValuedField". Der logische Ersatz für so ein MultiValueField ist ein Datenmodell mit einer m:n Tabellenbeziehung.

Nur der Optik wegen würde ich sowieso auf ein Listenfeld im Formular verzichten, denn das würde nur bei einer Mehrfachauswahl einen Sinn ergeben; ansonsten ist das Platzverschwendung. Es wird i.d.R. einfach eine Kombobox oder Textfeld für die Anzeige verwendet. Die Auswahl selber könnte man dann durchaus etwas aufwendiger in einem Dialogformular gestaltet werden (siehe Anhang).

Im Beispiel hier mal "Laboranordnungen" mit einer Mehrfachauswahl und mit einer möglichen Kolorierung inkl. Vorauswahl. Technisch wurde das einfach mit einem lokalen "fabricated Recordset" realisiert, u.a. auch, weil damit der Datenverkehr reduziert werden kann und nicht jede Änderung per Event in eine Tabelle geschrieben werden muß. Beim Schließen des Dialogs werden dann alle Änderungen automatisch innerhalb einer Transaktion in die zugrunde liegenden m:n - Tabellen übernommen.

Gruß Knobbi38





Bitsqueezer

Hallo Ulrich,

ZitatDas verstehe ich nicht ganz. Wenn in Access ein Mehrfachauswahfeld per Assistent in eine Tabelle eingefügt wird, ist das automatisch ein "MultiValuedField". Der logische Ersatz für so ein MultiValueField ist ein Datenmodell mit einer m:n Tabellenbeziehung.

Ja eben, das hatte ich gemeint mit "normaler" Tabellenbeziehung zur Vermeidung von MultiValuedFields. In der gezeigten Lösung sieht es optisch ähnlich aus, intern ist es aber eine m:n-Beziehung - wie es sein soll - und damit kann man auf MVF komplett verzichten - diese wären ja auch nicht skalierbar, wenn man z.B. die Datenbank mal auf einen DB-Server umziehen will.

Es gibt immer mehr als eine Lösung, aber wenn Du eine bessere hast, wäre eine Beispiel-DB bestimmt hilfreich, der Screenshot hilft da eher weniger... ;)

Gruß

Christian

Knobbi38

#6
@christian:

Der Screenshot war mehr für den OP gedacht, um mal zu zeigen, wie so etwas gestaltet werden könnte. So einfach konnte ich das jetzt nicht aus dem lfd. Projekt extrahieren, deshalb auch keine kleine BeispielDB und es gibt auch Rechte Dritter zu beachten.

Ob das dann besser als deine Lösung ist, kann ich nicht sagen, eher vielleicht anders, aber ich schaue mir deine Lösung mal an.

VG Ulrich

Knobbi38

@christian:

Deine Lösung (SelectRecordsV2) in Verbindung mit der Klasse clsCCRecordSelect ist schon eine ziemlich clevere Lösung und ein Beispiel für eine sehr geschickte Verwendung von Arrays und Collections.

Was mir allerdings weniger gefällt, ist, dass mit jeder Änderung die Arrays und Collections neu aufgebaut werden. Damit werden natürlich auch alle Datensätze aus der Datenquelle neu eingelesen, was u. U. zum Flackern beim Bildaufbau führen kann. Genau das wollte ich bei meiner Lösung eigentlich vermeiden. Durch das wiederholte Einlesen könnte es außerdem zu Irritationen bei konkurrierenden Zugriffen auf dieselbe Datenquelle durch andere Benutzer kommen.
Wenn das keine Rolle spielt, ist das sicherlich eine sehr elegante, einfach anzuwendende und universelle Lösung.  8) 

Ein paar Fragen zum Detail hätte ich aber noch:
1. Gibt es einen besonderen Grund für die Verwendung eines Array als Item in der Collection? Hätte nicht einfach TRUE/FALSE und ein Key gereicht?
2. Die Zeile    If Not prv_ColIDs.Count = False Then ...    habe ich jetzt (noch) nicht verstanden. 

VG Ulrich



Bitsqueezer

Hallo Ulrich,

das ist schon ein paar Jährchen her, ich kann mich da jetzt nicht ad hoc an den Code erinnern.. :)
Count = False zu testen, kommt mir jetzt erst mal auch komisch vor.. :D
Wobei False ja auch 0 ist, so gesehen wird es wohl dennoch funktionieren..

Ja, je nach Modus muß es leider neu aufgebaut werden. Weil ja dann alle, die nicht gewählt sind, deaktiviert werden müssen. Aber wie gesagt, dazu muß ich mir den Code nochmal ansehen.
Ist auf jeden Fall mittlerweile der zweit-beliebteste Download und hat sogar die Filterklasse überholt.

Gruß

Christian

DerSolide

Hallo Christian und Ulrich,

vielen Dank für Eure Anregungen ... von denen ich allerdings nur einen Bruchteil verstanden habe  ;) .

Ich habe mich entschlossen, ein einfaches Listenfeld mit ein wenig VBA-Code im Hintergrund zu verwenden.

Ist jetzt "optisch" zwar nicht "schön", aber funktioniert ... und das ist das wichtigste.


Schöne Grüße,
Christian