Einzelnen Beitrag anzeigen

barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Fremdschlüssel-Attribute darstellen

  Alt 28. Jan 2004, 10:32
Zitat:
Du fragst doch die Felder der Tabelle ab mit

Source:
select * from TabelleA

oder mit
Source:
select Feld1, Feld2, Kunden_Id, FeldXyz from TabelleA

oder etwa nicht?

dann kannst du doch auch gleich abfragen

Source:
select A.Feld1, A.Feld2, A.Kunden_ID, B.Name, B.Nachname
from TabelleA A
inner join Kundentabelle B ON (A.Kunden_ID=B.ID)


Etwas anderes ist das mit dem LokupFeld,
Man kann auch der Query dynamisch zur Laufzeit alle Felder hinzufügen lassen (ist dann als ob man sie im Feld-Editor hinzugefügt hätte) und dann ein solches Lookup-Feld hinzufügen.
Das ist aber etwas Arbeit.

Am einfachsten ist es doch, die Felder aus den entsprechenden Tabellen gleich mit abzufragen (wie oben).
Grüß Dich jlanger!

Ja das klingt zwar nett, aber: Ich möchte meine DB-Oberfläche möglichst dynamisch erzeugen. Soll Heißen beim Start der Anwendung wird für jede Tabelle eine Query erzeugt. Je nach Inhalt der Tabelle soll auch das zugehörige SQL-Statement generiert werden. Z.B.:

Tabelle Kunde->
Select * from Kunde So weit so gut. Damit habe ich dann eine Abrage, die mir alle Felder der Tabelle liefert. Das Dumme ist, das ich für die Darstellung meiner Tabellen jeweils ein DBGrid verwende. Wenn ich nun die Tabellen-Daten darstelle, bekomme ich auch nur die Felder die vorhanden sind.

Du hast Recht: ich könnte das Statement mit einem Join versehen, so dass ich die Daten in meinem Dataset habe. Das ist bei einer dynamischen Erzeugung allerdings nicht so ohne weiteres möglich, denn dafür brauche ich ja die Fremdschlüssel jeder Tabelle, und die zu referenzierenden Werte aus der Detail-Tabelle.

Du hast auch Recht: die dynamische Erzeugung der Lookupfelder ist aufwendig.

Meine bisherige theoretische Lösung sieht wie folgt aus:

Ich benenne in der DB alle Fremdschlüssel nach dem Prinzip: 'Tabellenname'+'_'+'Anzeigename'

Beispiel:

Tabelle Kunde:

Kunde_ID
Kundenname

Tabelle Bestellung

Bestellung_ID
ProduktName
Kunde_ID

=> in der Tabelle "Bestellung" existiert ein Fremschlüssel diesen nenne ich dann: "Kunde_Kundenname".

Wenn ich jetzt im Programm meine Query erzeuge, frage ich mit "Show keys from 'DB-Name'+'.'+'Tabellenname'" die Schlüsselfelder ab. Als Namen bekomme ich dann für die Tabelle "Bestellung": 'Kunde_Kundenname'. Dieses Ergebnis der Abfrage muss ich dann noch trennen in 'TabellenName' und 'FeldName'. Damit habe ich das Lookup.

Mein SQL-Statement ergänzt sich dann:

SQL-Code:
select Bestellung.*,Kunde.KundenName
from Bestellung, Kunde
Alles klar?
Ich sehe keine einfachere Möglichkeit. Vielleicht hast Du ja noch eine Idee!?

Ich freu mich auf Deine Antwort,

Gruß, Barnti

P.S.: Ich habe die Nachricht auch noch einmal zum aktuellen thread gepostet
  Mit Zitat antworten Zitat