Форум: "Базы";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
ВнизКак скопировать поле их одного 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c