Запись BLOB-полей из 1С через OO4O. #426377


#0 by 1sevgene
Добрый день. Подскажите, пожалуйста, существует ли возможность записать файл (картинку) в BLOB-поле Oracle из 1С 7.7 используя OO4O (Oracle Objects for OLE )? Спасибо.
#1 by Ковычки
а чо это - OO4O ?
#2 by ДенисЧ
А почему бы и нет, если сама тулза умеет это делать...
#3 by 1sevgene
OO4O - Oracle Objects for OLE Создаю объект:    Сессия    = CreateObject("OracleInProcServer.XOraSession"); и подключаюсь к базе данных Oracle.
#4 by 1sevgene
В смысле Oracle умеет? Так да, он умеет, но в 1С пишет, что тип данных не поддерживается.
#5 by Ковычки
ну и на здоровье или там метод/свойство должно принимать/отдавать байты ?
#6 by Ковычки
вот с этого и надо начинать оберни оберткой
#7 by 1sevgene
Как?
#8 by Ковычки
ты же нам рассказал про оо4о, тебе лучче знать может и эту СоздатьОбъект("MSScriptControl.ScriptControl")
#9 by 1sevgene
можно поподробнее?
#10 by Ковычки
сперва ты про оо4о подробнее, по полочкам лучше с кодом, и не надуманным, а конкретно какой написан, но не более 15 строк
#11 by 1sevgene
Пытался вставить туда: im.Read (нарыл здесь на форуме), где
#12 by Ковычки
BlobFeeld - это что байты, массив байтов или что ?
#13 by 1sevgene
Набор двоичных символов.
#14 by 1sevgene
Постараюсь объяснить что мне нужно. В теме есть метод ПолучитьBLOB(<ИмяПоля>,<ИмяФайла>). Вот мне нужно наоборот, вставить файл в поле.
#15 by Ковычки
Что то не дописал в Грубо, так примерно
#16 by 1sevgene
Скрипт.Execution("BlobFeeld.Value=Stream.Read"): Поле агрегатного объекта не обнаружено (Execution)
#17 by Ковычки
ну что ты такой привередливый .executestatement(
#18 by Torquader
а в Oracle BLOB-поля не курсором читаются и пишутся.
#19 by 1sevgene
Спасибо, но не работает. Возможно я напутал что-то с типами параметров. Как это "курсором"?
#20 by 1sevgene
... ошибку пишет уже другую, оракловскую а не 1С.
#21 by Torquader
сначала создаётся курсор (CREATE CURSOR FOR BLOB или как там это пишется). Так. Стоп. А BLOB-поле привязано к записи, а где была создана запись ? Вот Oracle вам и сказал, что не выбрана запись для добавления поля.
#22 by Ковычки
определись с типом и запости ошибку "оракловскую"
#23 by Ковычки
по коду в она витает в воздухе не думай, что издеваемся
#24 by Ковычки
в оракле только умею консоль типа ЕМ скульного под виндой запускать и пароли у усеров менять
#25 by 1sevgene
Где и каким образом создать курсор? Запись делаю так: Insert into .... Ошибку пишет вот такую: Oracle Automation: OIP-04801: Invalid input Oracle object instance
#26 by 1sevgene
Полный текст запроса добавления поля:
#27 by 1sevgene
что обозначает "витает в воздухе"? Я же выполняю вставку и прописываю параметры. Если параметр BlobFeeld не задать, то вставляется запись с пустым значением поля blobfield в таблице.
#28 by Ковычки
Наверное как то так
#29 by 1sevgene
... или параметры не могут принимать значения типа 'Blob'. Вобщем, просветите, пожалуйста :-(
#30 by Ковычки
только AppendChunkByte короче, тебе должно быть виднее, у тебя оракл
#31 by 1sevgene
а как получить ссылку на BlobFeeld?
#32 by 1sevgene
боюсь, єто не свойство параметра...
#33 by Ковычки
ранее написал хотя апендчанкбайт с массивом работает
#34 by Ковычки
если будет актуально, стучись завтра в аську, что бы оракл у тебя под рукой был
#35 by 1sevgene
сори, сейчас попробую
#36 by 1sevgene
ОК, спасибо.
#37 by 1sevgene
Скрипт.executestatement("BlobFeeld.AppendChunkByte(Stream.Read,Stream.Size)"): Ошибка компиляции Microsoft VBScript: Недопустимо использование скобок при вызове процедуры Sub
#38 by Ковычки
...("Call BlobFeeld..
#39 by Ковычки
скорее всего, что написал - так полуфабрикат, надо 1с подруки и хотя бы оракл слышать от другого там либо массив, дибо строку добавлять, без byte
#40 by 1sevgene
Объект не поддерживает это свойство или метод: 'BlobFeeld.AppendChunkByte'  :-( Наверное, нужно все таки использовать курсор... Torquader, просьба помочь по данному вопросу.
#41 by Torquader
Кстати, у OLE DB есть возможность определять, как представлять тип BLOB, так как по умолчанию, он не есть поток байтов - поэтому, Object Browser - и смотрим, какие параметры у BLOB-поля, чтобы оно было задано. Кроме того, запрос типа Insert сначала делают prepare, чтобы он "подготовился" и определил параметры, а потом уже "execute".
#42 by v77
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim PartDesc as OraCLOB 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. 'Create a Dynaset containing a BLOB and a CLOB column set part = OraDatabase.CreateDynaset ("select * from part where 'Copy the entire LOB content to partdesc.txt file PartDesc.CopyToFile "partdesc.txt"
#43 by v77
Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim PartImage as OraBLOB 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. 'Create a Dynaset containing a BLOB and a CLOB column set part = OraDatabase.CreateDynaset ("select * from part where 'copy the entire content of partimage.jpg file to LOBS part.Edit PartImage.CopyFromFile "partimage.jpg" part.Update
#43 by Ковычки
Ну, ну...
#45 by v77
Такое не работает чтоли?
#46 by Ковычки
хотя х.з.
#47 by v77
чтение запись
#48 by Torquader
Как вы вдвоём в 43 запись залезли ?
#49 by Torquader
по-идее, всё нормально написано.
#50 by 1sevgene
Это все скрипт?
#51 by mikecool
помнится давно писал в блобы из дельфи - состав команд зависит от провайдера данных. используя бде - можно кажется было просто insert и все а вот используя doa - сначала инсерт, а потом апдейт с добавлением данных блоба кажись что то такое было
#52 by v77
Это код на VB переписываешь на язык 1С и все переписать несложно
#53 by 1sevgene
Попробую. Случай чего, далеко не убегайте :-)
#55 by 1sevgene
Спасибо.
#56 by smaharbA
думаю вот тут PartImage = part.Fields("part_image").Value взбрыкнет
#57 by smaharbA
хотя х.з.
#58 by 1sevgene
{D:WORK!RETAIL-TEST-NEWEXTFORMSBLOB.ERT}: Oracle Automation: OIP-04908: This operation is not permitted on a Null LOB
#59 by 1sevgene
Разобрался. v77, СПАСИБО ОГРОМНОЕ!
#60 by v77
None of the LOB operations are allowed on NULL LOBs. To avoid errors, this may be detected via the IsNull property. To perform write operations on a LOB that is NULL, the LOB column must first be initialized with an 'Empty' value.
#61 by v77
напиши как разобрался
#62 by 1sevgene
В таблице у меня 2 поля: ИД картинки и картинка. Сначала делаю инсерт с непустым параметром ИД поля и пустым параметром картинки. Затем вставляю картинку в BLOB с помощью Вашего кода:
#63 by 1sevgene
сори, без цикла правильно
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С