Показать сообщение отдельно
  #17  
Старый 13.09.2012, 14:22
kerby666 kerby666 вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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)
Ответить с цитированием