Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как скопировать поле их одного DataSet в другой? [D5, Win95/98, WinME, Win2k]


Erik ©   (2003-08-26 12:25:00) 

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


Reindeer Moss Eater   (2003-08-26 16:26:00) [1]

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


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

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


Reindeer Moss Eater   (2003-08-26 16:18:00) [3]

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


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

Я сделел неполное копирование, но для моих целей этого хватило.
Возможно этот код комуто понадобится.
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;


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

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


Reindeer Moss Eater   (2003-08-26 15:27:00) [6]

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


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

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


Skier   (2003-08-26 12:49:00) [8]

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


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

Зато у FieldDefs есть


Skier   (2003-08-26 12:42:00) [10]

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


Skier   (2003-08-26 12:39:00) [11]


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

Да ну ?!


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

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


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

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


Skier   (2003-08-26 12:31:00) [14]

>Erik (26.08.03 12:29)
???


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

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


Skier   (2003-08-26 12:29:00) [16]

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


Reindeer Moss Eater   (2003-08-26 12:27:00) [17]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо