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ě:
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é tabulky
procedure 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