Добрый день!
Подскажите, пожалуйста, правильный (наиболее эффективный в плане производительности) способ копирования данных из одного Dataset'a в другой, при условии, что копировать нужно все подряд данные, но только часть полей (объём данных достаточно большой).
Спасибо.
Нравится
А какая предыстория у этой задачи. То есть, какой функционал хотите реализовать?
Первый из датасетов создается динамически при импорте заявок из xml файлов. Второй - лог операций после обработки заявок из первого датасета, и привязан к физической таблице.
И другая задача (тоже ждет своей оптимизации) - первый датасет, сформированный на основе динамического фильтра, второй - таблица, в которую нужно сохранить результат фильтрации.
Ну если смотреть в сторону производительности, то я думаю в вашем случаю будет удобно использовать insertquery как в первой так и второй задаче.
Если ветка относится ко второй задаче, то я ответил по варианту получения текста запроса для обработки его результатов напрямую на сервере.
Здравствуйте,
1)Например так :
function Main() { var ds_to = Services.GetNewItemByUSI('ds_to'); var ds_from = Services.GetNewItemByUSI('ds_from'); ds_from.Open(); ds_to.Open(); while(!ds_from.IsEOF) { ds_to.Edit(); ds_to('ID') = ds_from('ID'); ds_to('Name') = ds_from('Name'); ds_to.Post(); ds_to.Close(); ds_from.GotoNext(); } ds_from.Close(); }
В случае если Вы хотите генерировать новые ID, используйте Connector.GenGUID();
ds_to('ID') = Connector.GenGUID();
2) Второй способ, это подключить scr_DB и воспрользоваться функцией CopyFullData(SourceDataset, DestinationDataset)
При этом вы получите точную копию данных датасетов
Пример:
var ds_to = Services.GetNewItemByUSI('ds_to'); var ds_from = Services.GetNewItemByUSI('ds_from'); ds_to.Open(); ds_from.Open(); CopyFullData(ds_from, ds_to);
Спасибо, Алексей,
Я сделал комбинацию из функционала, реализованного в скрипте scr_DB и предложенного Вами.
Т.к. нужно было именно 1 операция сохранения для каждой записи с уже измененными значениями, а столбцов довольно много, чтобы их перебирать вручную по названиям.