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