![]() |
Datenbank: NexusDB • Version: 2.05 • Zugriff über: Datasource / Query
Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Ich hab für mich ein komplexes Problem wo ich nicht so richtig weiss wie ich es lösen soll. Ich erkläre zuerst einmal meinen Aufbau:
1. Tabelle = Welle 2. Tabelle = Lager Die zweite Tabelle enthält also "n" Einträge die zu jeweils einem Eintag in der ersten Tabelle gehören. In der Lagertabelle sind viele Parameter und eben auch der Lagername gespeichert. Abhängig davon werden eben Messungen durchgeführt 3. Tabelle = Referenzen Irgend eine von den vielen Messungen wird als Referenzmessung gekennzeichnet, und diese wird in der Referenztabelle gespeichert. In dieser Referenztabelle soll jetzt aber nicht die Lagernummer sondern der Name der Lagerstelle nachher in meiner Software angezeigt werden. Jetzt könnte ich klar einfach den Namen in der Refernztabelle speichern. Das geht aber leider nicht, denn der Name ändert sich ab und zu ( Kundenwunsch, und der ist Befehl ). Also muss ich in der Referenztabelle mir die Nummer der Welle und des Lagers merken, und würde nun gerne darüber den Namen wieder bekommen. Mein erste Versuch: Die Tabelle "Lager" hat als Mastersource die Tabelle "Welle", die Tabelle "Welle" hat als Mastersource die Tabelle "Referenzen". Das funktioniert auch so weit, wenn ich einen Eintrag in der Tabelle "Referenzen" selektiere, dann wird im Grid die richtige Welle und die dazugehörigen Lagerstellen angezeigt. Was ich jetzt noch nicht habe ist, dass die Namen automatisch im Grid der Tabelle "Referenzen" stehen. Also habe ich über den Fieldetitor der Tabelle ein weiters Feld in der Tabelle eingeführt, und dieses als Lookup ( "Nachschlagen" )Feld definiert. Dort als Schlüsselfeld die Lagernummer der Referenztabelle gewählt, als Datenmenge die Datasource die auf die Lagertabelle zeigt, als Schlüssel die Lagernummer und als Ergebnis den Lagernamen Das klappt in soweit, dass ich für den ersten Eintrag in der Referenztabelle den richtigen Namen bekomme. Es sieht aber so aus als ob der Lookup nicht durch die Datenbank läuft, denn ich bekomme bei allen Wellen den Namen für die Lager des ersten Wellentyps Ich hoffe ich habs verständlich erklärt. Hat jemand eine Idee wie ich es schaffe dass für alle Wellen und deren Lager in der Tabelle "Referenzen", die ja alles gleichzeitig anzeigt, die Namen der Lager zu bekommen? |
Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Hallo,
wenn eine Query den DataSet für dein Referenzen-Grid liefert, dann könntest du die Namen der Wellen und Lager per Join beisteuern:
SQL-Code:
Grüße vom marabu
/* WELLEN (ID, NAME, ...) */
/* LAGER (ID, NAME, ...) */ /* REFERENZEN (ID, WELLEN_ID, LAGER_ID, ...) */ SELECT R.*, W.NAME, L.NAME FROM REFERENZEN R, LAGER L, WELLEN W WHERE R.WELLEN_ID = WELLEN.ID AND E.LAGER_ID = LAGER.ID |
Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Das verstehe ich jetzt nicht ganz, ich hab das mal versucht, aber es kommt nicht das raus was ich will.
SELECT Referenz.*, KennDatLager.LagerName FROM Referenz, KennDatLager, KennDatTyp WHERE Referenz.WellentypNr = KennDatTyp.WellentypNr AND Referenz.LagerNr = KennDatLager.LagerNr Ich bekomme dann jede Referenz 6 mal aber der Name der Lagerstelle ist nicht dabei, wo bekomme ich den dann her? Hier nochmals mein Aufbau der Tabellen: //* KennDatTyp ( ID, WellenNummer, Parameter ) // das ist das was ich oben als Wellen bezeichnet habe //* KennDatLager ( ID, IDKennDatTyp, LagerNummer, LagerName, Parameter ) // Lager //* Referenz ( ID, WellenNummer, LagerNummer, Referenzparameter ) |
Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Vergiss meinen Vorschlag mit JOIN - der taugt nichts - und lass uns noch ein wenig über dein Datenmodell diskutieren, bevor wir zur Lösung kommen. Wenn dein Modell stimmt, dann signalisiert KENNDATLAGER.IDKENNDATTYP, dass es eine 1:n Beziehung von Welle zu Lager gibt - hast du auch so beschrieben. Dann aber gibt es zu jedem Lager nur eine Welle und der Verweis auf ein Lager in Tabelle REFERENZ identifiziert indirekt die Welle. REFERENZ.WELLENNUMMER ist dann ein Normalisierungsfehler. Außerdem solltest du in Tabelle REFERENZ nicht WellenNummer und LagerNummer speichern. Eine Datenbeziehung wird über Schlüsselfelder hergestellt.
marabu |
Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Du hast vollkommen Recht, ich habe dabei nur ein Problem:
Der Bediener hat also eine Welle und die Lagerstellen definiert und macht die Referenz. Das passt dann auch so wie Du es beschreiben hast wenn ich die ID der Lagerstelle bei den Refernzen speichere dann finde ich auch den Namen. Jetzt ist es nur so dass die mir irgendwann Wellen löschen und neu anlegen, so dass diese dann eine neue ID bekommen, die Referenz soll aber die gleiche bleiben. Dann passt aber die ID nicht mehr zwischen Referenztabelle und Lager, deshalb hat mein Vorgänger den Wellentyp und die Lagerstelle in die Referenztabelle abgelegt. Bisher war das auch ok, denn die wollten nur die Lagernummer sehen, jetzt ist aber eben einer auf die Idee gekommen dass der Lagername sinnvoller wäre. Klar könnte ich jetzt den Namen auch einfach in der Referenztabelle ablegen, nur der ändert sich eben auch wenn die eine Welle löschen und mit der gleichen Nummer neu anlegen und dann hab ich wieder ein Problem. Ich weiss dass die Lösung wie es jetzt gemacht ist nicht die beste ist, aber ich kanns eben auch nicht einfach ändern, denn dann müssten wir die Datenbank an allen Anlagen auch tauschen. |
Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Reicht unter diesen Umständen nicht vielleicht doch das hier?
SQL-Code:
marabu
select r.*, l.lagername
from referenz r, kenndatlager l where r.lagernummer = l.lagernummer |
Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Ich bin der Meinung das "union" dir weiterhelfen sollte
(Gibt's bei deinem DB-System auch - habe ich schon nachgeschaut) Gruß Matthias |
Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Zitat:
Union sagt mir leider gerade nix, aber ich schau mal nach :-) |
Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Zitat:
Vielleicht kann mir jemand helfen
SQL-Code:
Ich habe die Query auf Basis der Referenztabelle erstellt oder muss die auf die Lagerstellen zeigen?
SELECT R.*
FROM Referenz R, KennDatTyp T WHERE R.WellentypNr = T.WellenTypNr UNION SELECT R.*, L.LagerName FROM Referenz R, KennDatLager L WHERE R.LagerNr = L.LagerNr |
Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Bei UNIONS mussen diue felder der Teilabbfragen identisch sein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz