Показать сообщение отдельно
  #7  
Старый 13.09.2012, 10:35
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от kerby666
А можно мне глянуть кусок кода, чтоб понять, как это реализуется. Думаю, это именно то, что нужно. Спасибо!

блин в предыдущем посте 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;

поля в приёмнике нужно создать до этого с такими же названиями как у источника (при желании можешь доработать до автоматического создания полей)

должно работать для любого наследника TDataSet, если нет TVirtualTable можно просто таблицу подсунуть

P.S. второй код писал без проверки, может содержать ошибки

P.S.S. пока писал меня обогнали)) точно есть ClientDataSet я про него забыл))
Ответить с цитированием