Delphi > Obecné

Přidání sloupce do TClientDataSet

(1/1)

PetrB0:
Ahoj,
mám tabulku v TClientDataSet a potřebuji tuto tabulku naklonovat tak, že do ní přidám sloupec.
Dělám to následovně:

--- Kód: Delphi ---Procedure VStructureCallBack(VCDS : TClientDataSet);Const     cPole = 'test';Var   F : TField;  Begin     VCDS.FieldDefs.Add(cPole, ftInteger, 0, False);     F := TIntegerField.Create(VCDS);     F.FieldName := cPole;     F.DataSet := VCDS;     F.FieldKind := fkCalculated;     // VCDS.OnCalcFields := CDSCalcFields;  End; //VCo obsahuje data a strukturu zdrojové tabulkyprocedure CloneTable(VCo : OleVariant;VKam : TClientDataSet);Vare       CDS : TClientDataSet; Begin  CDS:=TClientDataSet.Create(Nil);  Try   CDS.Data:=VCo;   CDS.SaveToFile('Pred.xml',dfXMLUTF8); //Obsah vstupní tabulky   VKam.FieldDefs.Assign(CDS.FieldDefs); //VKam.Fields.Count=0   VSTructureCallBack(VKam); //VKam.Fields.Count=1   VKam.CreateDataSet;   VKam.SaveToFile('Mezi.xml',dfXMLUTF8); //Vstupní tabulka rozšířená o jeden sloupec, bez dat   CDS.First;   While Not CDS.EOF Do    Begin     VKam.Append;     VKam.CopyFields(CDS);     VKam.Post;     CDS.Next;    End;  VKam.SaveToFile('Po.xml',dfXMLUTF8); //Vstupní tabulka rozšířená o jeden sloupec, počet řádků dat odpovídá vstupu, ale řádky jsou prázdné  Finally   CDS.Free;  End; End; 
Problém je ten, že sloupec skutečně přidám, ale nejsem schopný pracovat s těmi základními a ani nakopírovat jejich data.
Metoda VKam.FieldDefs.Assign(CDS.FieldDefs) mi sloupce přidá, ale jsou nedostupné. FieldsCount mi vrací nulu, ovšem výpis do souboru tyto sloupce uvádí.
Co dělám špatně? Nechybí mi tam ještě něco? Zkouším na různá místa přidat VKam.FieldDefs.Update, ale to nemá žádný význam.
Ve výstupech se mi vrací:
Pred.xml - ZákladníSloupec1,ZákladníSloupec2,ZákladníSloupec3 a komplet data (5 řádků)
Mezi.xml - ZákladníSloupec1,ZákladníSloupec2,ZákladníSloupec3,NovýSloupec a žádná data
Po.xml - ZákladníSloupec1,ZákladníSloupec2,ZákladníSloupec3 a 5 prázdných datových řádků

Díky
Pb

PetrB0:
Pokud to ještě trochu proházím

--- Kód: Delphi ---VKam.FieldDefs.Assign(CDS.FieldDefs); //VKam.Fields.Count=0VKam.CreateDataSet; //VKam.Fields.Count=3  O.K.VKam.Close;   VSTructureCallBack(VKam); //VKam.Fields.Count=1VKam.Open; Tak potom ve výpisu na závěr nemám ani data, ani přidávaný sloupec.

PetrB0:
Tak už jsem to asi odhalil. Bylo to tím matláním FieldDefs.Add a TIntegerField.Create.
Nechal jsem jenom VCDS.FIeldDefs.Add(cPole,ftInteger,0,False) a už to běhá.
Zjevně to řešení čekalo, až sem napíšu.

Navigace

[0] Seznam témat

Přejít na plnou verzi