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

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

RobertG
********
Beiträge: 2050
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 zäume das Ganze einmal von hinten auf.

Die Dezimalzahlen hatte ich doch schon erstellt. Du brauchst also nur die Datei zu nehmen, die ich wieder hoch geladen hatte. Dass die direkte Umwandlung bei den Loks klappt, bei den Waggons nicht, liegt daran, dass die Texte bei den Waggons mit einem Dezimalkomma versehen sind, die bei den Loks mit einem Punkt. Deswegen muss bei der Tabelle für die Waggons erst einmal der Text zu einem Text mit Trenner Punkt umgewandelt werden um dann daraus eine Dezimalzahl zu erstellen.

Löschen von Waggons aus den Zügen: Einfachen auf den Tabellenkopf bei dem Tabellenkontrollfeld gehen, rechte Maustaste → Löschen. Oder über die Navigationsleiste löschen. Damit löscht Du den Waggon aus dem Zug, nicht aus der Tabelle für die Waggons.

Bisher ist die Tabelle für die Zugzusammenstellung darauf ausgelegt, eine Lok mit vielen Waggons zu kombinieren. Es darf also nie ein Waggon mehrmals an einem Zug erscheinen. Lok und Waggon müssen von der Kombination her eindeutig sein. Wenn Du mehrere Kombinationen mit einer Lok erstellen willst, dann brauchst Du in der Tabelle "rel_Zug" ein zusätzliches Feld, meinetwegen "Zug". Das kann ein einfaches Integer-Feld sein, das standardmäßig immer '1' gesetzt wird. Dieses Feld dient bei mehreren Zügen dazu, sie zu unterscheiden und die Länge entsprechend aus zu geben.

Zu den Berechnungen: Die Berechnungen aktualisieren immer nur das gerade bearbeitete Feld. Wenn Du einfach nach unten erweiterst, dann kannst Du sehen, dass im ersten Datensatz die Zuglänge geringer ist als im 2. Datensatz. Wenn Du das Formular aktualisierst, dann stimmen die Endwerte wieder überein.

Gruß

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

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

Beitrag von HvThun »

Moin Robert,

ich hab da mal noch eine Frage:

Mich beschleicht so langsam das Gefühl, dass für das, was ich mir vorstelle, Makros erforderlich sind. Kann das sein?

Wenn ja, besteht bei Base die Möglichkeit, solch ein Makro per Point and Click zu erstellen oder muss man dazu SQL direkt programmieren?


Es grüßt

Hinnerk
RobertG
********
Beiträge: 2050
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,

warum sollen da bis zu dem jetzigen Zeitpunkt irgendwelche Makros erforderlich sein. Bis auf das Aktualisieren von Berechnungen ist da doch nichts, was den Einsatz bisher erforderlich machen würde.

Zusammenklicken kannst Du so etwas nicht.

Gruß

Robert
HvThun
**
Beiträge: 28
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 erneut ganz viel Dank für deine Geduld.

Die Frage mit dem Umwandeln hat was mit meiner Neugier zu tun, letzten Endes ist das Eisenbahn-Projekt auch etwas, an dem ich lernen will. Deine Antwort bezüglich des Punktes und des Kommas war sehr hilfreich und wird Folgefehler meinerseits verhindern oder / und die Fehlersuche deutlich vereinfachen.

Den Hinweis mit dem Löschen nehme ich auch voll Dank entgegen!

Das mit dem "Aktualisieren" hab ich dann etwas später auch herausgefunden, da hatte ich schon geschrieben, war ich zu hektisch.

Dein Hinweis bezüglich der Makros nehme ich sehr beruhigt entgegen, ich weiß nicht, ob ich die Kapazität habe, mich in SQL reinzukniehen, ich bin mit LaTeX noch ziemlich ausgelastet.

Ich habe aber noch eine Verständnisfrage:
Du hast eine Abfrage qry_Zuglänge eingefügt. Diese berechnet die jeweilige Zuglänge. Soviel habe ich verstanden, was ich aber nicht ganz verstehe, ist die "Funktions-Logik", welche sich dahinter versteckt.

Wenn ich diese Abfrage im Bearbeiten Modus offen habe, sehe ich im oberen Feldanteil eine Tabelle namens "a".

In dem darunter liegenden Feld finde ich dann z.B. bei dem Alias "Loklänge" die SQL-Anweisung ( SELECT "Länge" FROM "HL_Loktabelle" WHERE "LokID" = "a"."LokID" ). Hier wird somit die Loklänge aus der Hauptliste ausgelesen, ich verstehe nur den Sinn hinter dem zweiten Teil der Anweisung nicht, was "übergibt" hier "a" und warum. Wie gesagt, ich spreche fließend LaTex, aber SQL bin ich allerhöchstens Level A1. :-)

Warum ich das frage ist relativ einfach, ich will es verstanden haben um das so gewonnene Wissen in anderen Fällen nutzbringend einsetzen zu können.

Es grüßt

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

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

Beitrag von HvThun »

Moin Robert,

sorry sorry sorry sorry, noch eine Frage:

Ich habe einen Wagon testweise aus dem Subformular mittel Kontextmenü gelöscht, in diesem Fall den ersten.

Wenn ich nun einen anderen Wagen hinzufügen will, bekomme ich folgende Fehlermeldung beim Speichern:

Attempt to insert null into a non-nullable column: column: LokID table: rel_Zug in statement [INSERT INTO "rel_Zug" ( "WaggonID") VALUES ( ?)] at C:/cygwin64/home/buildslave/source/libo-core/connectivity/source/drivers/jdbc/Object.cxx:172

Was hab ich kaputt gemacht?

Es grüßt Hinnerk
RobertG
********
Beiträge: 2050
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,

zuerst einmal zu der Abfrage: Die Abfrage habe ich unter SQL erstellt. Das ist die beste Möglichkeit, die bestehende Tabelle "rel_Zug" weiter editierbar zu halten und aus den anderen Tabellen nur die Längenwerte auszulesen. Das Auslesen hierfür geht über eine korrelierende Unterabfrage. Dazu wird der Tabelle "rel_Zug" der Alias "a" zugewiesen. Dann kann ich mit Unterabfragen den aktuellen Wert der Felder LokID und WaggonID auslesen und dazu Abfragen stellen - eben die Abfragen zu Längen.

Zum Hinzufügen neuer Daten: Irgendwie ist da die Verknüpfung zum Hauptformular beim Austausch der Tabelle mit der Abfrage verschwunden.
Öffne das Formular zum Bearbeiten.
Klicke auf das Tabellenkontrollfeld → Rechte Maustaste → Formulareigenschaften
Verknüpfen von → "LokID"
Verknüpfen nach → "LokID"
(Du kannst die Auswahl über den Button mit den 3 Punkten in einer der Zeilen machen).
Dann wieder schließen, Formular abspeichern und das Einfügen neuer Waggons geht.

Gruß

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

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

Beitrag von HvThun »

Moin Robert,

vielen vielen Dank für deine Antworten und Hilfe, ich bin schon fast da, wo ich hin will und gelernt hab ich auch schon was Neues.

Den Befehl COALESCE beginne ich zu begreifen, nur die Syntax entzieht sich mir noch. Aber darum geht es jetzt nicht.

Ich bin am fine tuning des Eingabeformulars und scheiter leider noch an der Geschichte, eine alternative Garnitur für eine Lok zu erstellen. Du hattest folgendes geschrieben:

"Bisher ist die Tabelle für die Zugzusammenstellung darauf ausgelegt, eine Lok mit vielen Waggons zu kombinieren. Es darf also nie ein Waggon mehrmals an einem Zug erscheinen. Lok und Waggon müssen von der Kombination her eindeutig sein. Wenn Du mehrere Kombinationen mit einer Lok erstellen willst, dann brauchst Du in der Tabelle "rel_Zug" ein zusätzliches Feld, meinetwegen "Zug". Das kann ein einfaches Integer-Feld sein, das standardmäßig immer '1' gesetzt wird. Dieses Feld dient bei mehreren Zügen dazu, sie zu unterscheiden und die Länge entsprechend aus zu geben."

So ganz hab ich das noch nicht verstanden. Das Feld in der "rel_Zug" habe ich erstellt und auf standardmäßig "1" gesetzt. Der Sinn des Feldes erschließt sich mir sofort, ich gehe davon aus, dass ich dort durch ändern der 1 auf eine andere Zahl virtuell eine neue Lok erstelle und somit eine weitere Garnitur erstelle. Wie und wo bekomme ich diese Daten nun in das Feld? Ich habe versuchsweise in dem Formular ein Text-Feld erstellt, welches die "Garniturnummer" tragen soll. Ich bekomme aber keinen Zugriff auf das Feld in der rel_Zug Tabelle, mir werden an der Stelle nur Felder aus der HL_Lok Tabelle angeboten. Muss das Feld etwa in dem Subformular angelegt sein? Wenn ja, wie mach ich das nun wieder?

Dann hab ich noch eine kosmetische Frage:

Ich hätte gerne die Zuglänge aus Übersichtsgründen nur einmal dargestellt. Ich stelle mir das so vor, dass das Berechnungsergebnis der letzten Wagoneingabe dargestellt wird.

Es grüßt aus dem Norden

Hinnerk
RobertG
********
Beiträge: 2050
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 habe das mit der Zugnummer einmal eingebaut. Dann werden nur die Züge, die zusammengehören, bei der Länge berücksichtigt.

Schwierig wird es mit der Summierung in nur einem Feld. Sobald Du die Eingabe auf einen neuen Datensatz setzt zeigt das Feld dann keine Daten an, weil ja der neue Datensatz keine Daten hat. Da müsste dann doch das erste Makro mit rein, das die Aktualisierung bei jeder Datenänderung für das in einem anderen (Nebenformular) liegenden Feld vornimmt.

Gruß

Robert
Dateianhänge
EisenbahnV4.odb
(76.26 KiB) 13-mal heruntergeladen
HvThun
**
Beiträge: 28
Registriert: Sa, 16.12.2023 10:21

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

Beitrag von HvThun »

Moin Robert,

ich bin wirklich dankbar für deine Engelsgeduld und Hilfe!

Nachdem ich das neue Formular von dir gesehen habe, habe ich auch deine Bemerkung von vorher mit dem Feld "Zug" verstanden und auch, wo es hingehört.

Nun gibt es jedoch leider ein weiteres "Aber" :lol:

Ich weiß, Modelleisenbahner sind pingelig und es gibt bei uns auch den Schimpfnamen "Nietenzähler". Ich hatte zwar nie so das Gefühl, ein solcher zu sein, aber.......

Es gibt auf der Modellbahn (und im wirklichen Leben gab es das auch) Züge, die z.B. einen Bahnpostwagen mit sich führen, der dann sowohl im Güterzug als auch im Reisezug mitfuhr. So können dann fast unterschiedliche Züge entstehen, wo der ein oder andere Wagen dann doch in unterschiedlichen Garnituren mitfährt. :-)

Ich wollte das gleich mal mit dem neuen Formular simulieren und bekam dann folgende Fehlermeldung:

Violation of unique constraint SYS_PK_143: duplicate value(s) for column(s) "LokID","WaggonID" in statement [INSERT INTO "rel_Zug" ( "LokID","WaggonID","ZugNr") VALUES ( ?,?,?)] at C:/cygwin64/home/buildslave/source/libo-core/connectivity/source/drivers/jdbc/Object.cxx:172

Ich habe einen Wagen doppelt "erwähnt", aber in unterschiedlichen Zügen (wie oben beschrieben). Wie bekomme ich das denn nun umschifft?

Danke nochmal für deine Geduld

Hinnerk
RobertG
********
Beiträge: 2050
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 musst zwangsläufig jetzt den Zug mit als Primärschlüssel setzen. Dazu musst Du zuerst die Verbindungen in Extras → Beziehungen löschen. Dann das Ganze Abspeichern und am besten noch die Datei schließen. Anschließend die Tabelle rel_Zug zum Bearbeiten öffnen und alle 3 Felder auf einmal markieren. Jetzt rechte Maustaste und → "Primärschlüssel". Alle 3 Felder zusammen müssen jetzt eindeutig sein. Jetzt kannst Du auch in einem 2. Zug mit der gleichen Lok und den gleichen Waggons arbeiten.

Von dem Modellbahnbau ist mir eigentlich nur ein Begriff stark hängen geblieben: "filigran". Das war die Detailgetreue, bei der mein Schwager und ich uns überlegt haben, ob wir im Schotter auch rote Getränkedosen einer bestimmten Marke platzieren müssten.

Gruß

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

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

Beitrag von HvThun »

Moin Robert,

nun ist echtes Finetuning angesagt. Ich habe die Datenbank ziemlich an meine Bedürfnisse weiter angepasst. Dank deiner Hilfe hab ich auch mittlerweile meist verstanden, warum ich da was mache. Danke!!

Jetzt würde ich gerne noch irgendwie die Waggons in dem Formularfeld vernünftig sortiert bekommen. Mit vernünftig meine ich, dass die Waggons zunächst in Gruppen der jeweiligen Garnitur angezeigt werden (aktuell kann es sein, dass zwischen 2 Waggons der Garnitur 1 dann doch einer der Garnitur 2 auftaucht, ich bekomme die Logik allerdings nicht raus, nach der die Datenbank sortiert).

Dann hätte ich es gerne (das ist aber schon ziemliche Nietenzählerrei), dass die Waggons einer Garnitur in der von mir ausgewählten Reihung angezeigt werden (der oberste Waggon ist der, der direkt hinter der Lok hängt usw.). Die Waggons in der HL_Wagen sind im Prinzip wenn überhaupt nach Datum des Erwerbs sortiert, auch das allerdings nicht konsequent.

Ich musste schon sehr schmunzeln bei eurer Überlegung, ob im Gleisschotter der Modellbahn auch noch weggeworfene Getränkedosen dargestellt werden müssten. Ich bin Modellbahntechnisch eher der Technikfreak, auf meiner Platte ist eine ziemliche Gleiswüste am Start und wie du vielleicht aus der Lokliste erkennen kannst, bin ich überhaupt nicht Epochentreu, bei mir fährt die T9 vom Beginn des letzen Jahrhunderts neben dem ICE, bei mir fährt, was ich schön finde, nur bei irgendeiner Bahnverwaltung auf deutschem Boden sollten die Loks dann doch gefahren sein.

Viele Grüße

Hinnerk

Achja, ich packe meine angepasste Version hier dran.
EisenbahnV5.odb
(73.69 KiB) 12-mal heruntergeladen
RobertG
********
Beiträge: 2050
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

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

Beitrag von RobertG »

Öffne einfach einmal die dem Tabellenkontrollfeld zugrundeliegende Abfrage. Versuche die Abfrage zu sortieren. Das ist die "Logik", nach der das Ganze sortiert wird.
Zuerst zeigt das Tabellenkontrollfeld natürlich die Datensätze in der Reihenfolge, in der sie abgespeichert wurden. Wenn Du dann eine Sortierung vornimmst, dann zeigt das Tabellenkontrollfeld die Sortierung nach den Integer-Zahlen, die eben in der Tabelle abgespeichert sind - nicht nach dem angezeigten Textinhalt eines Listenfeldes.
Wenn Du also nach einem anderen Kriterium sortieren willst, dann muss das Kriterium mit in die Abfrage aufgenommen werden.

Ich habe die Sortierung in der Abfrage einmal korrigiert, auch die Längenangabe nach den Zügen korrigiert und zusätzlich in die Tabelle ein Feld eingebaut, mit dem die Position des Waggons im Zug gekennzeichnet werden kann.
Dateianhänge
EisenbahnV5.odb
(73.19 KiB) 35-mal heruntergeladen
HvThun
**
Beiträge: 28
Registriert: Sa, 16.12.2023 10:21

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

Beitrag von HvThun »

Moin Robert,

ich danke dir, ich hab glaube ich jetzt das Tool, was ich wollte und fast so, wie ich es mir vorgestellt hab. Die "Kompromisse" bezüglich der Zuglänge sind absolut tolerabel.

Danke danke danke

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

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

Beitrag von HvThun »

Moin Robert,

nun kommt die Fortsetzung, sicher etwas zwänglerisch aber bestimmt lösbar, nur ich komme nicht drauf.

Ich habe in der Datenbank eine Abfrage erstellt, welche mir eine Tabelle erstellen soll, in der hinter einer Lok dann deren Wagons und die Gesamtlänge des Gebildes dargestellt werden soll.

Ich frage hierbei die dank deiner Hilfe erstellte Tabelle ab, habe dann aber "nur" die Zuordnung eines Wagens zu einer Lok, zwar so, wie wir das miteinander erarbeitet haben (Position im Zug, Zuglänge usw.).
Da ich aber gerne eine Tabelle erstellen möchte, die dann gfs. Richtung Calc exportiert werden soll,

Irgendwie komme ich nicht weiter. Hast du einen Rat?

Es grüßt Hinnerk
Dateianhänge
EisenbahnV5.odb
(77.92 KiB) 2-mal heruntergeladen
RobertG
********
Beiträge: 2050
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

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

Beitrag von RobertG »

Willst Du die Waggons nebeneinander in Feldern erscheinen lassen? Oder sollen alle Waggons in einem einzigen Feld erscheinen. Wenn Du sie nebeneinander als Felder erstellst, dann wirst Du bei einem Export in Calc die Längenangabe immer in der gleichen Spalte ganz rechts stehen haben.
Da Du die interne HSQLDB benutzt: Es gibt dort leider keine Funktion, die die Waggons alle zusammen in eine Zelle fasst. Für einen passenden SQL-Code müsste ich vorher wissen, wie viele Waggons maximal an einen Zug gehängt werden sollen.
Antworten