Добрый день. Пытаемся записать 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 в конфигурации. И далее работать как с обычной таблицей.