AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Namen über mehrer Tabellen suchen/geleichzeitig anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

Ein Thema von Surrounder · begonnen am 7. Aug 2006 · letzter Beitrag vom 7. Aug 2006
Antwort Antwort
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#1

Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 10:15
Datenbank: NexusDB • Version: 2.05 • Zugriff über: Datasource / Query
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?
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 10:40
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:
/* 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
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 11:31
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 )
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 12:27
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
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 13:00
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.
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 13:37
Reicht unter diesen Umständen nicht vielleicht doch das hier?

SQL-Code:
select r.*, l.lagername
from referenz r, kenndatlager l
where r.lagernummer = l.lagernummer
marabu
  Mit Zitat antworten Zitat
mbamler

Registriert seit: 19. Mai 2005
Ort: Hamburg
118 Beiträge
 
Delphi 7 Architect
 
#7

Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 13:50
Ich bin der Meinung das "union" dir weiterhelfen sollte
(Gibt's bei deinem DB-System auch - habe ich schon nachgeschaut)

Gruß
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 14:59
Zitat von marabu:
Reicht unter diesen Umständen nicht vielleicht doch das hier?

SQL-Code:
select r.*, l.lagername
from referenz r, kenndatlager l
where r.lagernummer = l.lagernummer
marabu
Leider nein, denn ich hab ca. 100 Wellen und die haben natürlich alle ein Lager mit der Nummer 1

Union sagt mir leider gerade nix, aber ich schau mal nach
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 16:49
Zitat von mbamler:
Ich bin der Meinung das "union" dir weiterhelfen sollte
(Gibt's bei deinem DB-System auch - habe ich schon nachgeschaut)

Gruß
Matthias
Also ich denke auch es sollte mit Union gehen, aber ich bekomme es nicht hin

Vielleicht kann mir jemand helfen

SQL-Code:
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
Ich habe die Query auf Basis der Referenztabelle erstellt oder muss die auf die Lagerstellen zeigen?
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Namen über mehrer Tabellen suchen/geleichzeitig anzeigen

  Alt 7. Aug 2006, 16:50
Bei UNIONS mussen diue felder der Teilabbfragen identisch sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz