Доброго дня.
Столкнулся с проблемой:
Необходимо перегнать значения из строкового поля в blob поле, но при запуске скрипта выдает ошибку
"Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом"
function Main()
{
var TaskDataset = Services.GetNewItemByUSI('ds_Task');
EnableDatasetFilters(TaskDataset, false);
var ID = '{332C64BC-245B-4A08-B345-C392F4A8FCFF}';
ApplyDatasetFilter(TaskDataset, 'ID', ID, true);
TaskDataset.Open();
while(!TaskDataset.IsEOF)
{
var Detalization = TaskDataset('Detalization');
var Stream = new ActiveXObject('ADODB.Stream');
Stream.CharSet = 'windows-1251';
Stream.Mode = 3;
Stream.Type = 2;
Stream.Open(Detalization);
var Field = TaskDataset.DataFields.ItemsByName('DetalizationRich');
Field.SetValAsBlob(Stream);
Stream.Close();
TaskDataset.GotoNext();
}
TaskDataset.Post();
TaskDataset.Close();
}
{
var TaskDataset = Services.GetNewItemByUSI('ds_Task');
EnableDatasetFilters(TaskDataset, false);
var ID = '{332C64BC-245B-4A08-B345-C392F4A8FCFF}';
ApplyDatasetFilter(TaskDataset, 'ID', ID, true);
TaskDataset.Open();
while(!TaskDataset.IsEOF)
{
var Detalization = TaskDataset('Detalization');
var Stream = new ActiveXObject('ADODB.Stream');
Stream.CharSet = 'windows-1251';
Stream.Mode = 3;
Stream.Type = 2;
Stream.Open(Detalization);
var Field = TaskDataset.DataFields.ItemsByName('DetalizationRich');
Field.SetValAsBlob(Stream);
Stream.Close();
TaskDataset.GotoNext();
}
TaskDataset.Post();
TaskDataset.Close();
}
В чем может быть проблема? Заранее спасибо
Нравится
3 комментария
8 августа 2016 12:01
Здравствуйте.
Сообщение говорит, что не правильно открываете Stream.
Пример записи значения поля [ФИО] Контакта на деталь [Описание] раздела Контакты:
var ID = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}'; var ContactDataset = Services.GetNewItemByUSI('ds_Contact'); EnableDatasetFilters(ContactDataset, false); ApplyDatasetFilter(ContactDataset, 'ID', ID, true); ContactDataset.Open(); var DescriptionDataset = Services.GetNewItemByUSI('ds_Description'); ApplyDatasetFilter(ContactDataset, 'ID', ID, true); var SubjectSelectQuery = ContactDataset.SelectQuery; var DetailSelectQuery = DescriptionDataset.SelectQuery; var FromTable = SubjectSelectQuery.Items(0).FromTable; DetailSelectQuery.Items(0).FromTable = FromTable; DescriptionDataset.Open(); var FieldName = ContactDataset.DataFields.ItemsByName('Name'); var FieldDescription = DescriptionDataset.DataFields.ItemsByName('Description'); var Stream = new ActiveXObject('ADODB.Stream'); Stream.CharSet = 'windows-1251'; Stream.Mode = 3; Stream.Type = 2; Stream.Open(); Stream.Position = 0; Stream.WriteText(FieldName.Value); DescriptionDataset.Edit(); FieldDescription.SetValAsBlob(Stream); Stream.Close(); DescriptionDataset.Post(); DescriptionDataset.Close(); ContactDataset.Close();
8 августа 2016 15:00
Cпасибо большое!
Теперь все работает, правда если я хочу перегнать все записи, то выдает ошибку "Out of memory"
Можно с этим как то бороться?
8 августа 2016 16:02
Попробуйте вызывать функцию CollectGarbage(0.001);
Выполняйте Post() в цикле, а также создание Strem-а вне цикла.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать