Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.022 c
6-1127837051
maVladimir
2005-09-27 20:04
2006.01.15
Многопоточная закачка файлов


14-1134971578
Progger
2005-12-19 08:52
2006.01.15
Мессага боссу о контрафакте


2-1135582359
ksu
2005-12-26 10:32
2006.01.15
прозрачный фон TLabel


6-1128509833
Profik
2005-10-05 14:57
2006.01.15
MailSlot


14-1135064032
stone
2005-12-20 10:33
2006.01.15
Это по-русски...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский