Цитата:
Сообщение от Lost_Fish
блин в предыдущем посте P.S. не сохранил
я для этого использую DevArt IBDAC http://www.devart.com/ibdac/download.html у него в комплекте идёт TVirtualTable и TCRBatchMove (он переносит данные в VT)
Код:
procedure BatchMove(FromDS,ToDS:TDataSet;const Mode:TCRBatchMode=bmAppendUpdate);
var
BachMove:TCRBatchMove;
begin
try
BachMove:=TCRBatchMove.Create(nil);
BachMove.FieldMappingMode:=mmFieldName;
BachMove.Mode:=Mode;
BachMove.Source:=FromDS;
BachMove.Destination:=ToDS;
BachMove.Execute;
ToDS.Open;
finally
FreeAndNil(BachMove);
end;
end;
но можно и без сторонних компонентов попробовать что-то типа этого
Код:
procedure BatchMove(FromDS,ToDS:TDataSet);
var
x:Integer;
begin
if Assigned(FromDS) and Assigned(ToDS) and FromDS.Active and ToDS.Active then //если есть оба НД и они открыты
begin
FromDS.First; //в начало источника
While not FromDS.Eof do //цикл до конца источника
begin
ToDS.Append;//добавить в конец приёмника
for x:=0 to FromDS.FieldCount-1 do //цикл по всем колонкам источника
if ToDs.FieldByName(FromDS.Fields[x].FieldName)<>nil then //если есть колонка из источника в приёмнике
ToDS[FromDS.Fields[x].FieldName]:=FromDS.Fields[x].Value;//то переносим данные
ToDS.Post;
FromDS.Next; //следующий
end;
end;
end;
|
ToDS - это у меня ClientDataSet1 должно быть - здесь храню данные для последующего вывода в DBGrid.
FromDS - ??? Откуда забирать? Или создать еще одну виртуальную таблицу и туда записывать из первой(в которую попадают результаты sql)