Вопрос

Передача BLOB через ado dataset

Добрый день. Пытаемся записать BLOB при помощи ADO dataset на другой сервер, но выдаётся ошибка: 

0x8000ffff - TSObjectLibrary.ADODataset: Ошибка сохранения записи. Оригинальное сообщение об ошибке: Could not convert variant of type (Array Byte) into type (Integer)

Притом, происходит это именно при попытке записи BLOB'a, с записью других типов данных проблем нет.

Код:

var FileName = System.CreateObject('TSObjectLibrary.Value');
if (System.PromptForFileName(FileName, '*.*', '', "Выберите файл", '', false)) {
   var NameValues = FileName; 
}   
var Stream = new ActiveXObject('ADODB.Stream');
Stream.Type = 1;
Stream.Mode = 3;    //чтение+запись
Stream.Open(); 
Stream.Flush();
Stream.LoadFromFile(NameValues.Value); 
TestGUID = Connector.GenGUID();
var ds = Services.GetNewItemByUSI('adods_SupervisorChatFiles');
ds.Open();
ds.Append();
ds.DataFields('ID').Value = TestGUID;
Stream.Position  = 0;
ds.DataFields('FileData').LoadFromFile(NameValues.Value);
Stream.Close();
ds.Post();

 

Нравится

1 комментарий

Для BLOB-ов реализация в ADO отличается от других типов. Не уверен, что в классе ADODataset это реализовано. Как альтернативный вариант, можно попробовать грузить в обычный датасет, связанный с таблицей в базе, а затем на уровне сервера заливать по ADO на другой.

Также с другим сервером можно работать без ADODataset, а просто связать его как Linked Server. Создать в базе Terrasoft соответствующую view с триггерами на вставку-изменение-удаление, а к ней привязать сервис tbl в конфигурации. И далее работать как с обычной таблицей.

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