Dataset
Скрипты
Разработка

Копировать Dataset в Dataset

Добрый день!

Подскажите, пожалуйста, правильный (наиболее эффективный в плане производительности) способ копирования данных из одного Dataset'a в другой, при условии, что копировать нужно все подряд данные, но только часть полей (объём данных достаточно большой).

Спасибо.

Нравится

8 комментариев

А какая предыстория у этой задачи. То есть, какой функционал хотите реализовать?

Первый из датасетов создается динамически при импорте заявок из xml файлов. Второй - лог операций после обработки заявок из первого датасета, и привязан к физической таблице.

И другая задача (тоже ждет своей оптимизации) - первый датасет, сформированный на основе динамического фильтра, второй - таблица, в которую нужно сохранить результат фильтрации.

Ну если смотреть в сторону производительности, то я думаю в вашем случаю будет удобно использовать insertquery как в первой так и второй задаче.
Если ветка относится ко второй задаче, то я ответил по варианту получения текста запроса для обработки его результатов напрямую на сервере.

За подсказку с insertquery большое спасибо :)

Все же, а что если требуется скопировать и потом по некоторым полям тут же внести изменения?
(Все операции логируются, не хотелось бы выполнять Insert а потом Update, а перед вставкой модифицировать некоторые поля)?

Можно примерчик кода, пожалуйста?

Здравствуйте,
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 операция сохранения для каждой записи с уже измененными значениями, а столбцов довольно много, чтобы их перебирать вручную по названиям.

Показать все комментарии