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

Ошибка при записи в blob

Доброго дня.
Столкнулся с проблемой:
Необходимо перегнать значения из строкового поля в 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();
}

В чем может быть проблема? Заранее спасибо

Нравится

3 комментария

Здравствуйте.

Сообщение говорит, что не правильно открываете 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-а вне цикла.

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