Entwickler-Ecke
Datenbanken - Typisierte Datei durch DB ersetzen - DataSets in DataSets
Tom.Schröder - Mi 24.10.07 10:57
Titel: Typisierte Datei durch DB ersetzen - DataSets in DataSets
Guten Morgen!
Ich würde gerne bei einem Projekt von mir die Datenstruktur ändern.
Das Problem an der Sache: bislang verwende ich typisierte Dateien, das passt wunderbar.
Allerdings sind änderungen und ergänzungen ein absolutes grauen, da an sehr vielen Stellen geändert werden muss (speichern/laden).
Nun ist ein Bestandteil:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| type TDatenSatz1 = class(TObject) private Attribut1 : String[15]; Attribut2 : Integer; Attribut3 : boolean; end; |
Davon habe ich mehrere in einer TObjectList.
Delphi-Quelltext
1: 2:
| var MyDaten : TObjectList; |
Man sieht: nicht komplex. Bislang kein Problem. (MyDaten ließe sich wunderbar durch ein TClientDataSet mit entsprechenden Feldern String, Integer und boolean ersetzen)
Nun verkomplizieren wir das ganze:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| type TDatenSatz1 = class(TObject) private Attribut1 : String[15]; Attribut2 : Integer; Attribut3 : boolean; end;
type TDatenSatz2 = class(TObject) private Attribut1 : String[15]; Attribut2 : Integer; Attribut3 : boolean; Attribut4 : TObjectList end; |
Und ändern noch intern den Inhalt von MyDaten:
Delphi-Quelltext
1: 2:
| var MyDaten : TObjectList; |
Wie ließe sich nun MyDaten durch ein TClientDataSet beschreiben?
Dieses hätte 4 Felder: String, Integer, Boolean, DataSet.
Wie kann ich sagen, dass es sich bei dem DataSet in diesem Feld um die DataSet-struktur von oben handelt?
MfG
Tom Schröder
Aachen
Tom.Schröder - Mi 24.10.07 12:11
Hum, ich spiele die ganze Zeit rum, aber ich bekomme es nicht hin :-)
Siehe das angefügte Bildchen:
In das obere Grid sollen Name, Vorname, Geburtstadutm und... meinetwegen die ID des Nummerndatasets.
Im Oberen Grid ist ein Datensatz ausgewählt:
Tom Schröder 1.1.2007 4
In das untere Grid die Nummern.
Z.b.
ICQ 324526317
Telefon 35727527425724
Handy 4362437243
Arbeit 24572357437
Schuhgröße 41
Katzen 2
Wähle ich im oberen Grid einen Datensatz aus, soll im unteren Grid die dazugehörigen Nummern angezeigt werden (welche ja für jeden Eintrag auch in Zahl unterschiedlich sein können)
Critter - Mi 24.10.07 12:36
Hi,
dafür benötigst du 3 Tabellen.
Tabelle 1 entspricht deinem TDatenSatz2 aber ohne Attribut 4. Dafür verpasst du dem noch ein selbstincrementierendes Feld ID (autoinc).
Tabelle 2 entspricht TDatenSatz1 auch hier fügst du ein ID Feld ein (dies ist in der Regel in der ersten Spalte).
In der dritten Tabelle speicherst du dann die Verknüpfungen zwischen den beiden. Neben der Spalte ID hat diese Tabelle noch die Felder Tb1ID und Tab2ID.
Quelltext
1: 2: 3: 4: 5: 6: 7:
| ID Tab1ID Tab2ID +--------+---------------+-----------+ | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 1 | 4 | | 4 | 2 | 3 | +--------+---------------+-----------+ |
Hier würden z.B. der erste Eintrag aus Tabelle 1 die einträge 1,2 & 4 aus Tabelle 2 Zugeordnet werden. Der zweite Datensatz aus Tabelle 1 währe nur mit dem Datensatz 3 Aus Tabelle 2 verknüpft.
critter
Tom.Schröder - Mi 24.10.07 13:20
Danke für die Hilfe!
Das Prinzip ist klar:
Tabelle 1: Alle Personendaten
Tabelle 2: Alle Nummern
Tabelle 3: Welche Nummer zu welcher Person gehört
Also habe ich jetzt (immer noch dem Beispiel von gerade)
DataSet1:
ID | Name | Vorname | Geburtsdatum
DataSet2:
ID | Name | Nummer
Dataset3:
ID | IDTabelle1 | IDTabelle2
So die Theorie.
Wie mache ich die Verknüpfung in der Praxis?
Im Feldeditor gehe ich auf Neues Feld eintragen, für die ID nehme ich das AutoInc.
Aber die IDS? Als Integer? Die ID ist ja ein Integer - oder kann ich sagen dass es sich explizit um eine bestimmte ID handelt?
Ich spiele mal bisschen damit weiter :-)
Tom.Schröder - Mi 24.10.07 14:28
Die 'alte' Lösung:
Puh also vom Handling her gefällt mir meine Variante besser, mit den ObjectLists und so.
Wie kann ich es realisieren, dass zum Grid eine Listbox gehört: diese repräsentiert die zur Person gehörenden Nummern. Wähle ich einen Nutzer und füge in die ListBox einen Eintrag ein, sollte entsprechend Tabellen 2 und 3 ergänzt werden, aber daran scheitert es gerade bei mir :(
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!