Добрый день. Пытаемся записать 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();
Нравится
Для BLOB-ов реализация в ADO отличается от других типов. Не уверен, что в классе ADODataset это реализовано. Как альтернативный вариант, можно попробовать грузить в обычный датасет, связанный с таблицей в базе, а затем на уровне сервера заливать по ADO на другой.
Также с другим сервером можно работать без ADODataset, а просто связать его как Linked Server. Создать в базе Terrasoft соответствующую view с триггерами на вставку-изменение-удаление, а к ней привязать сервис tbl в конфигурации. И далее работать как с обычной таблицей.