DBGrid: Foreign Keys zu Values "aufloesen"

14/06/2008 - 11:46 von Thomas Zangl | Report spam
Hi!

Ich hab ein DBGrid und dort stelle ich den Inhalt einer Tabelle dar:

TGruppen:
GruppenID: Integer, primary key
Name: String
Erzeugt: DateTime
...
BenutzerID: Integer

dann gibt es eine Tabelle TBenutzer und die schaut so aus:

TBenutzer:
BenutzerID: Integer, primary key
Vorname: String
Nachname: String
...

Ganz klar: TGruppen.BenutzerID verweist auf TBenutzer.BenutzerID.

Im DBGrid wuerd ich jetzt gern die TGruppentabelle anzeigen, mit dem
DBNavigator etc. arbeiten um Rows einfuegen oder loeschen zu koennen.
Was mich stoert ist das BenutzerID als Integerwert angezeigt wird (eh
klar).

Ich will im BenutzerID-Feld gerne "<Vorname> <Nachname>" angezeigt
haben, beim Bearbeiten ein Drop-Down Feld und gespeichert werden soll
die BenutzerID. Wie kann ich das machen?

Danke & Lg,
,yours Thomas Zangl, Bakk.rer.soc.oec. - thomas@tzis.net -
- Freelancer - IT Consulting & Software Development -
- Student of Software Development-Economy (Master) -
- http://blog.tzis.net -
 

Lesen sie die antworten

#1 Michael Justin
28/06/2008 - 12:14 | Warnen spam
Thomas Zangl wrote:

Im DBGrid wuerd ich jetzt gern die TGruppentabelle anzeigen, mit dem
DBNavigator etc. arbeiten um Rows einfuegen oder loeschen zu koennen.
Was mich stoert ist das BenutzerID als Integerwert angezeigt wird (eh
klar).

Ich will im BenutzerID-Feld gerne "<Vorname> <Nachname>" angezeigt
haben, beim Bearbeiten ein Drop-Down Feld und gespeichert werden soll
die BenutzerID. Wie kann ich das machen?



Lookupfelder in Delphi können hierfür verwendet werden, dann werden alle
Mastersàtze (Benutzer) in eine Dataset-Komponente geladen, auf die dann
ein Lookupfeld in der Gruppentabelle verweist. Wenn Vorname und Nachname
benötigt werden, kann man dazu im Lookupdataset ein Calculated Field
definieren.

Ich weiss nicht ob das relevant ist, aber es kann bei dieser Lösung das
Problem entstehen, dass die gesamte Mastertabelle eingelesen wird, und
das eventuell sogar mehrmals im Programmablauf - hier muss man dann
eventuell besonders auf Performance und Speicherbedarf achten.


Alternativ kann man für das DBGrid auf ein Dataset umstellen, das einen
SQL JOIN der beiden Tabellen enthàlt. Dadurch werden von der Datenbank
genau nur die erforderlichen Personeninformationen in das Resultset
übernommen. Speicher- und Performancegefahr ist geringer, doch die Daten
sind eventuell standardmàßig nicht mehr editierbar, doch auch dafür gibt
es Lösungen.

Viele Grüße
Michael Justin
SCJP, SCJA
betasoft - Software for Delphi™ and for the Java™ platform
http://www.mikejustin.com - http://www.betabeans.de

Ähnliche fragen