Доброго дня.
Столкнулся с проблемой:
Необходимо перегнать значения из строкового поля в blob поле, но при запуске скрипта выдает ошибку
"Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом"
{
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();
}
В чем может быть проблема? Заранее спасибо
Нравится
Здравствуйте.
Сообщение говорит, что не правильно открываете Stream.
Пример записи значения поля [ФИО] Контакта на деталь [Описание] раздела Контакты:
[javascript]
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();
[/javascript]
Cпасибо большое!
Теперь все работает, правда если я хочу перегнать все записи, то выдает ошибку "Out of memory"
Можно с этим как то бороться?
Попробуйте вызывать функцию CollectGarbage(0.001);
Выполняйте Post() в цикле, а также создание Strem-а вне цикла.