Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: DerSolide am Dezember 27, 2022, 20:55:25

Titel: Sortierung eines Listenfeldes mit Einträgen aus einer Mehrfachauswahl
Beitrag von: DerSolide am Dezember 27, 2022, 20:55:25
Hallo,

da dies mein erster Beitrag in diesem Forum ist, hoffe ich, dass die Frage nicht zu trivial ist, denn trotz Bemühung der Suchfunktion habe ich keine brauchbaren Hinweise gefunden, um das Problem in Eigenregie zu lösen.

Problem:
Mittels der Abfrage

SELECT Containernummer, ContainerSpezifikationID, CSCNummer, CSCGueltigkeitsdatum, ContainerLeer, Containerinhalt, Stellplatz FROM tblContainerverwaltung; werden Datensätze in ein Listenfeld geschrieben. Das funktioniert auch einwandfrei, bis auf eine "Kleinigkeit":

In der Spalte "ContainerSpezifikationID" stehen lediglich z.B. die Schlüssel 1;7;8 aus der Tabelle "tblContainerspezifikation", welche auf deren "Klartext" verweisen oder kein Eintrag.

Tabelle: "tblContainerspezifikationen"

ID Containerspezifikation
1  Typ A

3  Typ C
7  Offen
8  Gefahrengut
...

Frage: Kann man durch Modifikation der o.a. Abfrage nicht die ID sondern den "Klartext" ins Listenfeld schreiben, d.h. aus "1;7;8" würde "Typ A;Offen;Gefahrengut" werden.
Alternativ würde mir ansonsten nur die Möglichkeit einfallen, diese Spalte zu parsen, in eine "Hilfsspalte" den "Klartext" zu schreiben und dann nach diesem sortieren.
Besser wäre natürlich die Variate mit der Abfrage.

Dies ist im Hinblick auf die weitere Verwendung notwendig, um die Einträge danach im Listenfeld je nach Spalte auf- oder absteigend sortieren zu können.

Dazu habe ich mir jeweils 2 Schaltflächen pro Spalte erstellt und mittels der Abfrage (beispielhaft für Sortierung absteigend nach Containernummer)

Me!lstContainerauflistung.RowSource = "SELECT Containernummer,ContainerSpezifikationID,CSCNummer,CSCGueltigkeitsdatum,ContainerLeer,Containerinhalt,Stellplatz FROM tblContainerverwaltung ORDER BY Containernummer DESC"umgesetzt.
Das funktioniert für die 6 Spalten - welche alphanumerischen Text oder ein Datum enthalten - einwandfrei, für die eine Spalte mit den eingetragenen ID aber nicht. Daher der Versuch dieses Lösungsansatzes, um danach über den "Klattext" sortieren zu können.

Vielen Dank im Voraus,
Christian



Titel: Re: Sortierung eines Listenfeldes mit Einträgen aus einer Mehrfachauswahl
Beitrag von: MzKlMu am Dezember 27, 2022, 23:32:22
Hallo,
nimm in die jetzige Abfrage die Tabelle mit den Klartexten dazu und verknüpfe über die Schlüsselfelder. Dannst Du das Klartextfeld zur Anzeige und zur Sortierung zur Verfügung, ohne irgendwelche Klimmzüge und so wie man es in einer Datenbank macht.
Titel: Re: Sortierung eines Listenfeldes mit Einträgen aus einer Mehrfachauswahl
Beitrag von: DerSolide am Dezember 28, 2022, 13:15:22
Hallo Klaus,

vielen Dank für die schnelle Rückmeldung.

Wenn ich Dich richtig verstehe, muss ich eine Art "geschachtelte" SELECT-Anweisung verwenden, d.h. das Feld "ContainerspezifikationID" aus der Tabelle "tblContainerverwaltung" durch eine SELECT-Anweisung (in Klammern geschrieben) ersetzen, welche über die ContainerspezifikationID den "Klartext" aus der Tabelle "tblContainerspezifikation" über dessen ID holt.

Da ich mit geschachtelten Abfragen nicht gerade vertraut bin, habe ich den heutigen Vormittag damit verbracht, verschiedene Variation auszuprobieren, was mir eine breite Palette an Ergebnissen - von keinem angezeigten Eintrag über eine kommentarlose Beendigung von Access bis zum Systemabsturz - geliefert hat, wie es nicht geht.

Das einzige halbwegs vernünftige Ergebnis ergab die Ergänzung der ursprünglichen Abfrage

SELECT Containernummer, ContainerSpezifikationID, CSCNummer, CSCGueltigkeitsdatum, ContainerLeer, Containerinhalt, Stellplatz FROM tblContainerverwaltung;
für die Datensatzherkunft des Listenfeldes durch

SELECT Containernummer, (SELECT ContainerSpezifikation FROM tblContainerspezifikation WHERE [tblContainerverwaltung].ContainerSpezifikationID = [tblContainerspezifikation].ID), CSCNummer, CSCGueltigkeitsdatum, ContainerLeer, Containerinhalt, Stellplatz FROM tblContainerverwaltung; 
Problem:

Damit wird jetzt zwar anstatt der Schlüssel "Klartext" angezeigt, allerdings

Ich denke, die Lösung geht in die richtige Richtung, aber ich benötige wohl noch einen kleinen Schubs um die auftretenden Fehler zu eliminieren.

Hast Du diesbezüglich noch einen Tipp für mich?


Schöne Grüße,
Christian







Titel: Re: Sortierung eines Listenfeldes mit Einträgen aus einer Mehrfachauswahl
Beitrag von: MzKlMu am Dezember 28, 2022, 13:40:11
Hallo,
ZitatIch denke, die Lösung geht in die richtige Richtung,
nein, tut sie nicht. Im Gegenteil, ist meilenweit entfernt.  ;D  Keine geschachtelte Abfrage, habe ich auch nicht gesagt. Eine Abfrage mit beiden Tabellen und der Verknüpfung über die Schlüsselfelder.
Weist Du was eine Verknüpfung bei den Abfragen ist ?
In Abfragen werden aus den Beziehungen die Verknüpfungen.

Kannst Du mal ein Bild des Beziehungsfensters zeigen ?
Beziehungen sind ja hoffentlich angelegt.
Ist das Listenfeld als mehrwertiges Feld direkt in der Tabelle angelegt ?
Titel: Re: Sortierung eines Listenfeldes mit Einträgen aus einer Mehrfachauswahl
Beitrag von: DerSolide am Dezember 28, 2022, 17:01:55
Hallo Klaus,

tut mir leid, da habe ich Deinen Hinweis wohl falsch verstanden. Eventuell reden wir auch aneinander vorbei, deshalb noch einmal das Problem in Bildern:

Beziehungen: (https://c.gmx.net/@329557955307375407/g4HR6rD1TteK2JpeNI2lmQ) <= Bitte Link anklicken, eingebundenes Bild wird nicht angezeigt!
(https://c.gmx.net/@329557955307375407/g4HR6rD1TteK2JpeNI2lmQ)

Mehrfachauswahl der Containerspezifikation im Formular "frmContainerverwaltung": (https://c.gmx.net/@329557955307375407/B0SuxzRrSV-VGECfUtNtGQ) <= Bitte Link anklicken, eingebundenes Bild wird nicht angezeigt!
(https://c.gmx.net/@329557955307375407/B0SuxzRrSV-VGECfUtNtGQ)

Deren Quelle, die Tabelle tblContainerspezifikationen: (https://c.gmx.net/@329557955307375407/ecT7qZq0T1eAhp5ENIMQBA) <= Bitte Link anklicken, eingebundenes Bild wird nicht angezeigt!
(https://c.gmx.net/@329557955307375407/ecT7qZq0T1eAhp5ENIMQBA)

Abfrage der Containerauflistung als Tabelle angezeigt: Hier wird der "Klartext" korrekt angezeigt (https://c.gmx.net/@329557955307375407/2TtUvRBKSfmznEmIw8KFUA) <= Bitte Link anklicken, eingebundenes Bild wird nicht angezeigt!
(https://c.gmx.net/@329557955307375407/2TtUvRBKSfmznEmIw8KFUA)

Dieselbe Abfrage der Containerauflistung im Listenfeld angezeigt: Nur die Schlüssel anstatt des "Klartextes" stehen im Listenfeld (https://c.gmx.net/@329557955307375407/bS0gQ2-tTFGM5VR6JYC6nA) <= Bitte Link anklicken, eingebundenes Bild wird nicht angezeigt!
(https://c.gmx.net/@329557955307375407/bS0gQ2-tTFGM5VR6JYC6nA)

Die unterschiedliche Anzeigeform derselben Abfrage habe ich Rot umrandet.

Nun zu den Fragen:

Eine Abfrage der beiden Tabellen mit Verknüpfung über die Schlüsselfelder habe ich versucht, bringt mir aber eine Fehlermeldung, dass das mehrwertige Feld "ContainerspezifikationsID" nicht in einer WHERE-Klausel verwendet werden kann. Da in diesem Feld ja mehrere Werte stehen (können), ist das für mich nachvollziehbar.

Das Beziehungsfenster findest Du weiter oben im Text.

Das Listenfeld habe ich weiter oben als Bild eingefügt, wobei das Feld "ContainerspezifikationID" mehrwertig ist.

Ehrlich gesagt habe ich keine Idee mehr (außer ich parse wie anfangs bereits erwähnt das Feld "ContainerspezifikationID" und konvertiere den jeweiligen Schlüssel über VBA in einen Textstring, mit dem ich die Schlüsseleinträge überschreibe bzw. in eine Hilfsspalte schreibe und nach denen ich dann ganz normal sortieren kann) wie ich die ursprüngliche Abfrage modifizieren könnte, damit das gewünschte Ergebnis angezeigt bzw. sortiert werden kann.


Schöne Grüße,
Christian
Titel: Re: Sortierung eines Listenfeldes mit Einträgen aus einer Mehrfachauswahl
Beitrag von: MzKlMu am Dezember 28, 2022, 17:59:48
Hallo,
vergiss diese Mehrwertfelder. Diese sind einer gut strukturierten Datenbank abträglich und auf keinen Fall zu empfehlen. Ein Problem dieser felder hast Du ja gerade aktuell. Ich habe da auch keine Lösung dazu, mein vorheriger Vorschlag ist da nicht brauchbar. Du wirst auch keine Hilfe bekommen, weil diese Mehrwertfelder niemand verwendet.

Zwischen Container und der Spezifikation liegt eine n:m Beziehung vor, dabei wird in einer Zuordnungstabelle zutreffende Spezis einem Container zugeordnet als je ein Datensatz. Diese Zuordnungstabelle fehlt bei Dir.

Ich möchte generell auch bezweifeln, dass das Datenmodell stimmt. Der/die Ansprechpartner gehören in eine extra Tabelle und in diese Tabelle kommt dann der Fremdschlüssel zur Abteilung. In die Containertabelle gehört nur der Fremdschlüssel zum Ansprechpartner. Auch der Protokollierer gehört in eine extra Tabelle damit man diesen per Kombi auswählen kann, sonst hast Du sehr schnell falsch geschrieben Namen in der Tabelle. Wenn einer aus Versehen Mülller mit 3 l schreibt findest Du den nicht.

Wieso kann eigentlich eine Containernummer mehrere Spezis haben ?
Der kann doch nicht gleichzeitig ein 10 Fuß, 20 Fuß 40 Fuß und ein HC Container sein ?
In den Beziehungen muss auch referentielle Integrität eingestellt sein/werden.
Id Felder nicht einfach ID nennen, sondern mit Bezug zur Tabelle.

Da gibt es noch viel zu tun.
Du solltest Dir auch mal die Grundlagen zu Access aneignen.
https://www.access-tutorial.de/

Zu den Nachschlage/Mehrwertfeldern:
https://www.access-tutorial.de/tabellen/tipps.htm
http://web.archive.org/web/20060213100523/http://dbwiki.de/wiki.php?title=Access_Anf%E4nger:_Die_Nachteile_von_Nachschlagefeldern (http://web.archive.org/web/20060213100523/http://dbwiki.de/wiki.php?title=Access_Anf%E4nger:_Die_Nachteile_von_Nachschlagefeldern)

PS:
Bilder hier im Forum hochladen. Externe Filehoster werden nicht gerne gesehen/benutzt.
Titel: Re: Sortierung eines Listenfeldes mit Einträgen aus einer Mehrfachauswahl
Beitrag von: DerSolide am Dezember 28, 2022, 18:51:33
Hallo Klaus,

vielen Dank für die Information und die Tipps.

Die Vorgaben für die "Datenbank" waren so gewünscht. Ich hätte - da nur wenige Daten vorhanden sind - das in Excel implementiert, eine Benutzeroberfläche darüber gestülpt und den Rest im Hintergrund über VBA gemacht, denn das ist eher meine Welt.
 
Während des Studiums hatte ich zwar auch relationale Datenbanken in einer eigenen Vorlesung mit praktischen Übungen (dBase), aber das ist mittlerweile Jahrzehnte her und mit Access keinesfalls vergleichbar.

Ich lege diese Frage dann einmal zu den Akten.

Bemerkung:
Bei den Bildern habe ich einfach stupide im Eingabeeditor die URL eingetragen. Ich hatte mich deswegen noch gewundert, weil ich dazu die Bilder extra auf den Mail-Server hochladen musste, was mir doch etwas umständlich erschien.

Danke auch für Deine Geduld. Ich lerne ja gerne dazu, werde aber definitiv nicht zum Access-Spezialisten werden  :)

Schöne Grüße,
Christian