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

Вниз

Как скопировать поле их одного DataSet в другой?   Найти похожие ветки 

 
Erik   (2003-08-26 12:25) [0]

Dest.Fields.Add(Source.Fields[i]); это конструкция только Assign делает! А мне надо реально поле создать.


 
Reindeer Moss Eater ©   (2003-08-26 12:27) [1]

Создавать надо конструктором класса


 
Skier ©   (2003-08-26 12:29) [2]

with Dest.Fields.Add do Assign(...) ?


 
Erik   (2003-08-26 12:29) [3]

Так я параметры хочу их исходного DataSet взять. А то некрасиво получается.


 
Skier ©   (2003-08-26 12:31) [4]

>Erik (26.08.03 12:29)
???


 
Erik   (2003-08-26 12:35) [5]

Что значить "with Dest.Fields.Add do Assign(...)" эта конструкция
она же работает точно также как и моя!
Поле несоздастся а скопируется указатель на него!
И будет весело :)


 
Reindeer Moss Eater ©   (2003-08-26 12:38) [6]

Dest.Fields.Add - это что по твоему, не создание?


 
Skier ©   (2003-08-26 12:39) [7]


> Поле несоздастся а скопируется указатель на него!

Да ну ?!


 
Skier ©   (2003-08-26 12:42) [8]

хм..
А действительно у TFields нет такого метода Add, который бы возвращал
TField. Sorry.


 
Reindeer Moss Eater ©   (2003-08-26 12:47) [9]

Зато у FieldDefs есть


 
Skier ©   (2003-08-26 12:49) [10]

>Reindeer Moss Eater © (26.08.03 12:47)
Есть. Но это не то что нужно автору.


 
Erik   (2003-08-26 15:25) [11]

CreateField - ктонибудь пользовался?


 
Reindeer Moss Eater ©   (2003-08-26 15:27) [12]

Есть. Но это не то что нужно автору.
По моему ему именно это и надо.


 
Arm79   (2003-08-26 15:36) [13]

если это ADO - есть метод Clone


 
Erik   (2003-08-26 16:14) [14]

Я сделел неполное копирование, но для моих целей этого хватило.
Возможно этот код комуто понадобится.
procedure CopyDef(const Source: TDataSet; const Dest: TClientDataSet);
Var i: Integer;
MyBuffer: PChar;
begin
Dest.Close;
Source.Active := True;
for i := 0 to Source.Fields.Count-1 do
with Source.Fields[i] do
Dest.FieldDefs.Add(FullName,DataType,Size,False);

Source.First;
Dest.CreateDataSet;
while not Source.Eof do
begin
Dest.Append;
for i := 0 to Source.Fields.Count-1 do
begin
GetMem(MyBuffer, Source.Fields[i].DataSize); оптимизировать
try
if Source.Fields[i].GetData(MyBuffer) then
Dest.Fields[i].SetData(MyBuffer);
finally
FreeMem(MyBuffer, Source.Fields[i].DataSize);
end;
end;
Source.Next;
end;
end;


 
Reindeer Moss Eater ©   (2003-08-26 16:18) [15]

А просто TClientDataSet заполнить через TDataSetProvider и Source - "мы не ищем легких путей" ?


 
Erik   (2003-08-26 16:23) [16]

Не, легкие пути, не для нас!
К томуже я хотел написать уневерсальную процедуру(хотябы принцып)


 
Reindeer Moss Eater ©   (2003-08-26 16:26) [17]

DataSetProvider1:=TDataSetProvider.Create;
DataSetProvider1.DataSet:=Source;
Dest.ProviderName:=DataSetProvider1.ProviderName;
Dest.Open;



Страницы: 1 вся ветка

Текущий архив: 2003.09.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
11-48485
LITTEL[MF]
2003-01-07 21:40
2003.09.15
SCREENSHOT


14-48694
Marser
2003-08-25 00:03
2003.09.15
Именинники 25 августа


3-48472
Ru
2003-08-26 12:42
2003.09.15
Оптимальное использование базы данных


3-48442
dmtr
2003-08-25 10:23
2003.09.15
Программное создание таблицы dBASE 4


3-48468
NorthMan
2003-08-22 19:15
2003.09.15
Народ, почему при работе с фоксовыми таблицами вылезает