Форум: "Базы";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизСкопировать поля набора данных Найти похожие ветки
← →
Juice © (2005-11-09 11:09) [0]Есть CDS1(открытый) и CDS2(закрытый). В CDS1 есть вычисляемые поля, агрегаты, и просто поля и вот хотелось бы в run-time скопировать все эти поля(но не их значения Value) в CDS2, другими словами сделать так, чтобы оба компонента были одинаковыми по составу полей. Это вообще возможно сделать в run-time?
← →
Ega23 © (2005-11-09 11:12) [1]Пройтись в цикле по филдам первого, добавить аналогичные филды во второй.
← →
Sergey13 © (2005-11-09 11:24) [2]CDS1.FieldList.SaveToStream
CDS2.FieldList.LoadFromStream
Не прокатит?
← →
Juice © (2005-11-09 11:26) [3]
for i:=0 to Source.FieldCount-1 do
Dest.Fields.Add(Source.Fields[i])
Если это имелось в виду то получается не то, что хотелось бы. Так поля линкуются вместе с данными, в Dest появляется только одна запись с данными что содержаться в Source и кроме того при уничтожении Dest происходит зависание программы, т.к. Source остается без полей, скорее всего.
← →
Juice © (2005-11-09 11:27) [4]
> CDS1.FieldList.SaveToStream
> CDS2.FieldList.LoadFromStream
> Не прокатит?
Сейчас попробую
← →
Juice © (2005-11-09 11:33) [5]
> CDS2.FieldList.LoadFromStream
ERROR: Property is read only
← →
ANB © (2005-11-09 11:38) [6]
> Juice © (09.11.05 11:26) [3]
Не совсем это. Хотя идея верная. Нужно ручками перегонять, а не копировать ссылки на объекты полей.
← →
Juice © (2005-11-09 11:45) [7]
> Нужно ручками перегонять
Это как ? Смотреть для каждого поля его тип (TIntegerField, TFloatField, ...), создавать новый экземпляр этого поля, для каждого типа поля тупо копировать характерную для него информацию, типа F2.FieldName:=F1.FieldName ?
← →
Nikolay M. © (2005-11-09 11:51) [8]
> создавать новый экземпляр этого поля, для каждого типа поля тупо копировать
> характерную для него информацию
Посмотри Example в хелпе для TCustomClientDataSet.CreateDataSet.
← →
Juice © (2005-11-09 12:44) [9]
Source.FieldDefs.Update;
Dest.FieldDefs := Source.FieldDefs;
Dest.FieldDefs.Update;
List:=TStringList.Create;
for i:=0 to Dest.FieldDefs.Count-1 do
begin
Dest.FieldDefs[i].CreateField(Dest);
Как ни странно, но в FieldDefs не попадают lookup и агреаты. А они и нужны в первую очередь!
← →
МишкаГамми (2005-11-18 15:29) [10]Вот так я копирую вместе с данными.
А если сами данные не нужны, то их потом можно удалить
uses ...Provider;
...
var prvTemp : TProvider;
...
// clds_SchetFact_2502 копируем в clds_Fact_orig
clds_Fact_orig.Close;
prvTemp:=TProvider.Create(nil);
prvTemp.DataSet:= frmChooseReport.clds_SchetFact_2502;
clds_Fact_orig.Data:=prvTemp.Data;
prvTemp.Destroy;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.019 c