Добрый день!
Подскажите, пожалуйста, правильный (наиболее эффективный в плане производительности) способ копирования данных из одного Dataset'a в другой, при условии, что копировать нужно все подряд данные, но только часть полей (объём данных достаточно большой).
Спасибо.
Нравится
А какая предыстория у этой задачи. То есть, какой функционал хотите реализовать?
Первый из датасетов создается динамически при импорте заявок из xml файлов. Второй - лог операций после обработки заявок из первого датасета, и привязан к физической таблице.
И другая задача (тоже ждет своей оптимизации) - первый датасет, сформированный на основе динамического фильтра, второй - таблица, в которую нужно сохранить результат фильтрации.
Ну если смотреть в сторону производительности, то я думаю в вашем случаю будет удобно использовать insertquery как в первой так и второй задаче.
Если ветка относится ко второй задаче, то я ответил по варианту получения текста запроса для обработки его результатов напрямую на сервере.
Здравствуйте,
1)Например так :
[javascript]
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();
}
[/javascript]
В случае если Вы хотите генерировать новые ID, используйте Connector.GenGUID();
[javascript]
ds_to('ID') = Connector.GenGUID();
[/javascript]
2) Второй способ, это подключить scr_DB и воспрользоваться функцией CopyFullData(SourceDataset, DestinationDataset)
При этом вы получите точную копию данных датасетов
Пример:
[javascript]
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);
[/javascript]
Спасибо, Алексей,
Я сделал комбинацию из функционала, реализованного в скрипте scr_DB и предложенного Вами.
Т.к. нужно было именно 1 операция сохранения для каждой записи с уже измененными значениями, а столбцов довольно много, чтобы их перебирать вручную по названиям.