Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 20.09.06 08:28 
Hallo,

ich habe hier eine Situation in der ich völlig unerfahren bin und bräuchte daher ein wenig hilfe :roll:. Und zwar habe ich hier eine tClientDataset Komponente, in welcher es unter anderen ein Feld gibt, welches vom Typ ftDataSet ist, also ein weiteres dataset enthällt. Nun möchte ich eigendlich nur für jeden eintrag meines tClientDataset auch alle untereinträge durchscrollen. Also Im Grunde etwas wie dieses:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
while not MasterDS.eof do begin
  while not MasterDS.FieldByName['DetailField'].AsDataSet.Eof do begin
    // Hier was mit den Einträgen machen
    MasterDS.FieldByName['DetailField'].AsDataSet.next;
  end;
  MasterDS.next
end;

Das hinterlegete ist natürlich quatsch aber so ungefähr hätte ich es gerne.

Ich habe auch folgendes Beispiel gefunden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
       for j := 0 to ClientDataSetKopf.FieldDefs.Count-1 do begin
         if (ClientDataSetKopf.FieldDefs[j].DataType = ftDataSet) then begin
           DataSetFeld := TDataSetField.Create(MyDM);
           DataSetFeld.FieldName := ClientDataSetKopf.FieldDefs[j].Name;
           DataSetFeld.DisplayLabel := ClientDataSetKopf.FieldDefs[j].Name;
           DataSetFeld.Visible := True;
           ClientDataSetKopf.Active := false;
           DataSetFeld.DataSet := ClientDataSetKopf;
           ClientDataSetPositionen.DataSetField := DataSetFeld;
         end;
       end;

was dafür sorgt, dass ich im zweiten tClientDataset ClientDataSetPositionen immer die korreckte "Kinddatenmenge" habe, aber welches auch leder alle Felder der Kopfdaten bis auf die Spalten mit dem ftDataSet ausblendet. Auf die Kopfinformationen muss ich aber auch zugreifen können.

Kann mich bitte jemand aufklähren wie ich mit diesen Versachachtelten Daten umgehen kann?

Gruß
Klabautermann
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Mi 20.09.06 09:00 
user profile iconKlabautermann hat folgendes geschrieben:
[...] ich habe hier eine Situation in der ich völlig unerfahren bin und bräuchte daher ein wenig hilfe :roll:. Und zwar habe ich hier eine tClientDataset Komponente, in welcher es unter anderen ein Feld gibt, welches vom Typ ftDataSet ist, also ein weiteres dataset enthällt. Nun möchte ich eigendlich nur für jeden eintrag meines tClientDataset auch alle untereinträge durchscrollen. Also Im Grunde etwas wie dieses:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
while not MasterDS.eof do begin
  while not MasterDS.FieldByName['DetailField'].AsDataSet.Eof do begin
    // Hier was mit den Einträgen machen
    MasterDS.FieldByName['DetailField'].AsDataSet.next;
  end;
  MasterDS.next
end;

Das hinterlegete ist natürlich quatsch aber so ungefähr hätte ich es gerne.


So sehr quatsch ist das doch gar nicht, nur, dass Du das Feld mit dem DataSet nicht als Feld ansprichst. Du hast einfach ein weiteres TClientDataSet zur Verfügung (ChildDS), das mit dem entsprechenden Feld des Master-DataSets verknüpft ist (MasterDS.DataSetFeld). ChildDS enthält dann immer die Kind-Tabelle des entsprechenden Master-Datensatzes.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
while not MasterDS.eof do begin
  while not ChildDS.Eof do begin
    // Hier was mit den Einträgen machen
    ChildDS.next;
  end;
  MasterDS.next
end;
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 20.09.06 12:25 
Hallo,
user profile iconRobert.Wachtel hat folgendes geschrieben:
So sehr quatsch ist das doch gar nicht, nur, dass Du das Feld mit dem DataSet nicht als Feld ansprichst. Du hast einfach ein weiteres TClientDataSet zur Verfügung (ChildDS), das mit dem entsprechenden Feld des Master-DataSets verknüpft ist (MasterDS.DataSetFeld). ChildDS enthält dann immer die Kind-Tabelle des entsprechenden Master-Datensatzes.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
while not MasterDS.eof do begin
  while not ChildDS.Eof do begin
    // Hier was mit den Einträgen machen
    ChildDS.next;
  end;
  MasterDS.next
end;

Das entspricht ungefähr dem, das der Zweite Quelltext von mir macht oder? Da habe ich aber das Problem, dass das MasteDS nur noch die Spalte des ClientDS enthällt, ich auf andere Felder des MasterDS also nciht mehr zugreifen kann. Was kann ich dagegen unternehmen?

Gruß
Klabuatermann
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Mi 20.09.06 12:31 
Auf die Masterdaten greifst Du doch mittels MasterDS weiterhin zu:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
while not MasterDS.eof do begin
  while not ChildDS.Eof do begin
    // Hier was mit den Einträgen machen
    ShowMessage(MasterDS.Field[1].AsString);
    ShowMessage(ClientDS.Field[1].AsString);
    ChildDS.next;
  end;
  MasterDS.next
end;


Was Dein zweiter Quelltext macht, kann ich jetzt auf die Schnelle nicht so überblicken... ;)
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 20.09.06 12:36 
Hi,
user profile iconRobert.Wachtel hat folgendes geschrieben:
Auf die Masterdaten greifst Du doch mittels MasterDS weiterhin zu:
{...}
Was Dein zweiter Quelltext macht, kann ich jetzt auf die Schnelle nicht so überblicken... ;)


Ok, ich stehe gerade völlich auf dem Schlauch, und sehe irgendwas tierisch offensichtliches nicht. Kannst du mit bitte sagen wie ich die Verknüpfung von MasterDS und ClientDS per Quelltext mache? Irgendwie bekomme ich das nciht gebacken.

Gruß
Klabautermann
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: Mi 20.09.06 12:38 
Cary Jensen hat genau diese Problemtaik im BDN beschrieben: bdn.borland.com/article/29825
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 20.09.06 13:21 
user profile iconRobert.Wachtel hat folgendes geschrieben:
Cary Jensen hat genau diese Problemtaik im BDN beschrieben: bdn.borland.com/article/29825

cool dankeschön, damit sollte es klappen.