![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как скопировать поле их одного 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]
Создавать надо конструктором класса