Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

Скопировать поля набора данных   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
14-1135079407
Умом Россию не понять
2005-12-20 14:50
2006.01.15
Русский язык


2-1135420209
Pazitron_Brain
2005-12-24 13:30
2006.01.15
Мой вопрос:


14-1134973829
Интересно мне
2005-12-19 09:30
2006.01.15
День добрый!


14-1135146377
Гриха
2005-12-21 09:26
2006.01.15
NOD32


14-1134716196
Ник (пишу с работы)
2005-12-16 09:56
2006.01.15
ТВ тюнер на winxp