Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

HvThun
**
Beiträge: 23
Registriert: Sa, 16.12.2023 10:21

Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von HvThun »

Moin Gemeinde,

nachdem ich nun, auch Dank der Hilfe aus dem Forum, mehreren Anläufen und einigen "Himmel bin ich Blöde", es geschafft habe, eine Datenbank zur Katalogisierung meiner Modelleisenbahn zu stricken, möchte ich nun auch "vernünftig" damit "arbeiten".

Das erste Projekt (eigentlich auch der Grund, warum ich eine relationale Datenbank haben wollte) soll sein, dass ich mittels der erfassten Daten Züge quasi "komponieren" kann und auf die Längen der Strecke auf der Modellbahnplatte mehr oder weniger zusammen stellen kann.

Ich habe hierfür zwei Master Tabellen erstellt (HL_Loks und HL_Wagons), in denen alles aus meiner Sicht wissenswerte zu den einzelnen Fahrzeugen zusammen gefasst ist. Für die Zugkomposition brauche ich allerdings nur einzelne Daten zu dem jeweiligen Teil (Name, Betriebsnummer und Länge).

Mit welchem Tool (Formular oder Abfrage) bekomme ich folgendes wie hin:

- es kann jeder Wagon für einen Zug nur einmal ausgewählt werden
- die Ausgabe soll vor allem die Gesamtlänge des Zuges automatisch errechnen und darstellen.

Es grüßt

Hinnerk
RobertG
********
Beiträge: 2047
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von RobertG »

Hallo Hinnerk,

Du willst ja vermutlich nicht nur den Waggon nur einmal an einen Zug setzen, sondern dann an anderen Zügen auch überhaupt nicht haben, oder?
Ich würde in der Tabelle mit den Waggons zusätzlich ein Feld Lok_ID einfügen, das das Primärschlüsselfeld von "HL_Loks" als Fremdschlüsselfeld in "HL_Wagons" speichert.
Im Formular hast Du dann alle Waggons stehen und in einem Listenfeld wählst Du zu jedem Waggon der Zug aus.

Beide Tabellen brauchen natürlich Längenangaben. Bei den Waggons musst Du die Längen summieren, die zu einem Zug gehören. Dazu wird einfach nach Lok_ID gruppiert und die Längenangabe summiert. Kann in einer Abfrage direkt erfolgen. So eine Abfrage kann dann als Unterabfrage mit der Abfrage zu "FL_Loks" kombiniert werden. Dann hast Du in der Gesamtabfrage die Länge der Lok und die Summe der Längen der Waggons. Dann brauchst Du nur noch zu addieren.

Sieht dann vielleicht so aus:

Code: Alles auswählen

SELECT "a".*, 
(SELECT SUM("LaengeW") FROM "HL_Wagons" WHERE "Lok_ID" = "a"."Lok_ID") + "LaengeL" AS "Zuglaenge" 
FROM "HL_Loks" AS "a"
Das ist eine sogenannte korrelierende Unterabfrage.
HvThun
**
Beiträge: 23
Registriert: Sa, 16.12.2023 10:21

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von HvThun »

Moin Robert,

zunächst erstmal herzlichen Dank für die Zeit, die du mir widmest!

Also, die Waggons sollten nur innerhalb einer Zuggarnitur nur einmal wählbar sein, allerdings möchte ich auch andere Garnituren erstellen, wo durchaus auch ein Waggon dann in zwei oder mehreren Garnituren auftaucht.

Den Code für das Addieren werde ich gleich mal ausprobieren. Danke schön auch dafür.

Viele Grüße

Hinnerk
RobertG
********
Beiträge: 2047
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von RobertG »

Hallo Hinnerk,

wenn es auch Kombinationen geben soll, bei denen die Waggons in anderen Zügen vorkommen, dann hast Du eine n:m-Beziehung. Eine Lok kann jeden Waggon haben. Ein Waggon kann an jeder Lok anhängen.
Die Tabelle hat nur die Felder "LokID" und "WaggonID". So eine Tabelle kannst Du über das Formular am besten füllen, wenn Du die Loks im Hauptformular anzeigst und im Unterformular dann ein Tabellenkontrollfeld hast, das nur die "WaggonID" beinhaltet. Aus dem Zahlenfeld musst Du ein Listenfeld machen, damit Du nicht die Waggonnummer einfügen musst sondern nach der Waggonbeschreibung die Nummer einfügen kannst.

Gruß

Robert
HvThun
**
Beiträge: 23
Registriert: Sa, 16.12.2023 10:21

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von HvThun »

Moin Robert,

irgendwie hab ich da echt ein Brett vorm Kopf oder will wieder zu viel.

Eigentlich würde ich gerne in einem Formular mit einem Dropdown Feld eine Lok aus der Lokhauptliste (HL_Loktabelle) auswählen anhand des Loknamens. Durch diese Auswahl sollte dann aus der Hauptliste die Betriebsnummer und die Länge mit übernommen werden.
Da nicht alle meiner Loks Züge ziehen (Rangierloks, z-gestellte oder Einzeltriebwagen), sollte es also immer eine Auswahl geben.

Dann sollte im gleichen Formular ebenfalls durch Dropdown Felder Wagons ausgewählt werden. Auch hier sollte nach dem Wagon Namen ausgewählt werden und automatisch dann Betriebsnummer und Länge "mitgenommen" werden, um dann nachher sämtliche Längen zu addieren.

Richtig cool wäre es, wenn ich während des "Eingabeprozesses" quasi die Wagonanzahl frei bestimmen könnte. (Ein TEE hat bei mir insgesamt 7 Teile, ein lokaler Güterzug nur 3 Wagons).

Und landen sollten die so gesammelten Daten dann in einer Haupliste Zug.

Ich habe es versucht, mit deinen Hinweisen, allerdings starre ich dabei wie ein Schwein ins Uhrwerk und bekomme es irgendwie nicht voreinander. Ich habe eine Relationstabelle erstellt, in der ich nur die LokID und die WagonID hinterlegt habe. Nun bekomme ich aber die Abfragen nicht wirklich nach meinen Wünschen konfiguriert und es kommt nur Murks dabei raus.

Viele Grüße

Hinnerk
RobertG
********
Beiträge: 2047
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von RobertG »

Hallo Hinnerk,

Du kannst die Datei doch hier hoch laden, wenn da keine persönlichen Daten drin sind. Ansonsten schicke sie mir per privater Mail

Schau Dir einfach einmal das Einstiegsbeispiel im Base-Handbuch an. Da steht etwas zu Personen, die Sport betreiben. Einer Person können beliebig viele Sportarten zugewiesen werden. Ersetze Personen durch Loks, ersetze die Sportarten durch Waggons. Dann hast Du die Zusammenstellung der Züge. Und da kannst Du natürlich selbst bestimmen, wie viele Waggons Du anhängen willst.

Natürlich kannst Du auch ein Formular zusammenbauen, das nur aus 2 Listenfeldern besteht. Nur musst Du dann die Lok immer wieder neu auswählen. Finde ich umständlich.

Die Inhalte eines Listenfeldes können so gestaltet werden, dass auch mehrere Felder angezeigt werden können. Das brauchst Du an der Stelle für die Waggons. Schau dazu im Kapitel "Abfragen" → "Abfragen für die Erstellung von Listenfeldern".
HvThun
**
Beiträge: 23
Registriert: Sa, 16.12.2023 10:21

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von HvThun »

Moin Robert,

hier nochmal das "Schwein vorm Uhrwerk". :-)

Irgendwie komme ich trotz befolgen der Anleitung doch noch nicht zu dem Ergebnis, welches ich mir vorstelle.

Also das Ende vom Lied sollte so aussehen, dass ich in einem Formular über ein Dropdown-Feld eine Lok aus der Hauptliste Loks auswähle und mir nach Auswahl der Lok automatisch mit angezeigt wird, wie lang diese ist (gerne noch zwei drei weitere Daten wie Epoche, Bauform und Traktion, welche in der Hauptliste hinterlegt sind). Diese sollten aber dann nicht veränderbar sein, da sie ja schon in der Hauptliste hinterlegt sind.

Dann sollte mittels eines weiteren Dropdown-Feldes eine variable Anzahl von Waggons hinzugefügt werden können, ebenfalls mit Darstellung von vor allem Länge und gfs. Epoche.

In dem Formular sollte dann ebenfalls ausgeworfen werden, wie lang der gesamte Zug ist.

Und das ganze Ergebnis dieser Komposition sollte glaube ich dann am besten in einer Tabelle hinterlegt werden. Oder muss ich das ganze über eine weitere Abfrage darstellen?

Fragen über Fragen

Hinnerk
HvThun
**
Beiträge: 23
Registriert: Sa, 16.12.2023 10:21

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von HvThun »

Moin Robert,

ein Nachtrag meinerseits, ich glaube, ich bekomme das anhand der Anleitung nicht komplett vernetzt, da ich nicht alle Loks aus der Hauptliste mit Waggons versehen will oder kann. Wenn ich das Beispiel aus der Anleitung richtig durchdrungen habe, wird dort jedem Teilnehmer eine Sportart zugewiesen, was ich bei der Zugerstellung aber nicht brauche. (Der Schienenzeppelin kann z.B. keine Anhänger ziehen). Es würden somit leere Verknüpfungen entstehen, oder?
In meiner Vorstellung sollte eigentlich eine eigene Tabelle entstehen, in die ich beliebig Loks aus der Lokliste auswähle und quasi eine Zuggarnitur erstelle, welche dann eine eigene ID hat, oder liege ich da falsch?

Ziemlich verknotet grüßt

Hinnerk
RobertG
********
Beiträge: 2047
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von RobertG »

Hallo Hinnerk,

Du kannst in dem Beispiel auch lauter SportlerInnen eintragen, ohne dass Du eine Sportart zuweist. Es muss ja nichts in dem Unterformular eingetragen werden. Das gilt dann bei Dir natürlich für die Loks.

Gruß

Robert
HvThun
**
Beiträge: 23
Registriert: Sa, 16.12.2023 10:21

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von HvThun »

Moin Robert, stimmt, ist mir bei erneuter Lektüre dann auch aufgefallen das es kein "Muss" ist mit der Lok - Waggon Zuordnung.

Nichts desto trotz stecke ich noch immer fest mit dem, was ich erreichen will. Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht, allerdings habe ich dann auch immer mal wieder das Gefühl, das Base zickt.

Ich schreibe noch mal zusammen, was ich erstellt habe, was ich versucht habe und was ich erreichen möchte, vielleicht entdeckst du meinen Fehler, welchen ich nicht sehe.

Ich habe mittels Formular zwei Haupttabellen erstellt (HL_Lok und HL_Wagen). In diesen Tabellen ist zu jedem Teil alles aus meiner Sicht Wissenswerte hinterlegt.

In der HL_Loks auszugsweise LokID, Lokbezeichnung, Hersteller, Länge usw. Analog in der HL_Wagen. Redundante Informationen wie Hersteller oder z.B. Kupplungstyp habe ich in separaten Tabellen hinterlegt, welche ich beim Eingabeprozess im Formular über ein Dropdown Feld abgerufen habe.

Als nächstes möchte ich aus beiden Listen heraus Zugkombinationen zusammen stellen. Hierbei möchte ich gerne in einem Formular z.B. eine BR 23.0 mittels Dropdown auswählen (hat in diesem Fall die LokID 5), das Formular stellt mir automatisch die zu der Lok gehörenden Daten Länge und z.B. Kupplungstyp dar.
Dieser Lok möchte ich nun ebenfalls wieder mittels Dropdown eine variable Anzahl von Wagons zuordnen, im Formular sollten nun Wagonname, Länge und Kupplungstyp erscheinen und zusätzlich eine Addition aller ausgewählten Fahrzeuglängen erfolgen.

Diese Zusammenstellung sollten dann (wahrscheinlich sinnvoll) in einer eigenen Tabelle hinterlegt werden. Da in diesem Fall die BR 23.0 eine Multifunktionslok ist (Personen- wie Gütertransport), sollte es auch möglich sein, diese Lok für einen weiteren Zug auszuwählen mit einer völlig anderen Wagongarnitur.

Was ich bisher gemacht habe, was aber in meinen Augen zum einen völlig unelegant ist, war, dass ich ein Formular erstellt habe, in dem ich eine neue Tabelle befülle mit ZugID, Lokname und 10 Wagonfeldern, in denen ich die Wagons dann auswähle.

Hier wird dann aber weder die Länge und der Kupplungstyp automatisch mit ausgeworfen noch kommt es zu einer Addition der Längen.

Die reine Relationstabelle aus dem Beispiel mit den Sportlern hat bei mir dahingehend gestreikt, dass mir zwar im ersten Anlauf die zusätzlich gewünschten Daten zur Lok angezeigt wurden, diese sich aber nicht anpassten, wenn ich eine andere Lok ausgewählt habe und zu allem Überfluß auch noch verändert werden konnten.

Was dann aber so gar nicht geklappt hat war die Mehrfachauswahl von Wagen, wobei ich glaube, dass hier der Bug vorm Bildschirm saß und ob des Frustes im Zusammenhang mit der Lokauswahl nicht mehr genau hingesehen hat.

Was mach ich falsch, was habe ich übersehen oder überfordere ich die Datenbank?

Fragen über Fragen

Hinnerk
RobertG
********
Beiträge: 2047
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von RobertG »

Hallo Hinnerk,

schicke mir die DB doch einfach einmal per privater Mail zu oder lade sie hier hoch. Das geht doch einfacher als die ellenlangen Texte hier.

Gruß

Robert
HvThun
**
Beiträge: 23
Registriert: Sa, 16.12.2023 10:21

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von HvThun »

Moin Robert,

als Anhang die Datenbank. Vielen Dank für die Geduld.
EisenbahnV4.zip
(57.1 KiB) 8-mal heruntergeladen
Gruß

Hinnerk
RobertG
********
Beiträge: 2047
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von RobertG »

Hallo Hinnerk,

ich musste für die Längenberechnungen erst einmal die Felder von Textfeldern über Zwischenschritte zu Dezimalzahlfeldern ändern. Jetzt ist die Längeneingabe ein Zahlenfeld. Musst Du wohl in den Formularen noch ändern. Texte können schließlich nicht addiert werden …

Dann habe ich das Formular für die Loks genommen und darunter ein Feld platziert, in dem die Waggons ausgewählt werden können sowie die Längenangaben gespeichert werden. Was mir zwischendurch noch aufgefallen ist: Zumindest eine Lok hat keine Längenangabe. Da wird der Zug dann von der Länge auch nicht berechnet werden können.

Gruß

Robert
Dateianhänge
EisenbahnV4.zip
(69.16 KiB) 8-mal heruntergeladen
HvThun
**
Beiträge: 23
Registriert: Sa, 16.12.2023 10:21

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von HvThun »

Moin Robert,

und schon wieder ganz herzlichen Dank für deine Zeit.

Zunächst zu der Lok ohne Länge, die hab ich mal so als Beifang bekommen, ich hab sie noch nicht ans Zentimetermaß bekommen weil sie absehbar nicht fahren wird und höchstens als Crash Test Dummy mal auf die Anlage darf. :-) Der innere Monk hat mich aber gezwungen, die auch in die Liste zu packen. :-)

Was mich jetzt allerdings noch umtreibt sind ein paar zum Teil sicherlich nur kosmetische Fragen:

- ganz dringend ist die Frage, wie ich Wagons wieder aus der Längen Liste lösche. Geht das über das Formular oder nur händisch aus der Relationsliste? Ersetzen wäre ab und an nicht sinnvoll.

- Wie bekomme ich es hin, die gleiche Lok für unterschiedliche Zug Garnituren zu konfigurieren? Als Beispiel, die BR 23.0 ist eine Multifunktionslok und zieht auch mal Güterzüge oder Personenzüge. Ich will die Zuglängenliste nämlich nutzen, um beim Bau der kommenden Anlage diverse Gleiskonfigurationen planen zu können.
Hier sollte dann in der Liste z.B. Zug 1 mit BR 23.0 und 4 Reisezugwagen und Gesamtlänge stehen, z.B. Zug 5 dann die gleiche BR 23.0 mit 6 Kesselwagen und Gesamtlänge stehen.

Was mir noch aufgefallen ist, ist, dass die Zuglänge nicht überall verändert wird, wenn ich einen Wagon durch einen anderen ersetze.


Es grüßt herzlich

Hinnerk
HvThun
**
Beiträge: 23
Registriert: Sa, 16.12.2023 10:21

Re: Verknüpfung von Daten aus zwei Tabellen mit zusätzlicher Addition

Beitrag von HvThun »

Moin Robert,

mir ist noch was unerklärliches aufgefallen. Du hattest natürlich völlig recht damit, dass das Längenfeld eine Dezimalzahl und kein Text sein darf, wenn damit gerechnet werden soll. Ich hatte dem beim Erstellen der Tabelle keine Bedeutung zu bemessen, da ich dachte, dass ich das gegebenenfalls wie bei Excel auch im Nachhinein noch ändern kann. Ob das bei Calc auch geht, hab ich nicht ausprobiert.
Weil mich dein Hinweis, dass du den Datensatz "Länge" über einen Umgehungsschritt konvertiert hast, stutzig gemacht hat, habe ich "einfach" mal in der Loktabelle das Feld Länge auf Dezimal mit 2 Nachkommastellen umgestellt. Es klappte. Ermuntert durch den Erfolg wollte ich das in der Wagon Liste auch machen, hier gings nicht. Es gab eine Fehlermeldung, dass eine Konvertierung nicht möglich sei.

Warum?

Grüße

Hinnerk
Antworten