Имя: Пароль:
1C
1С v8
Чтение поля Image из SQL таблицы
0 Rustik666
 
15.01.13
12:28
Нужно прочитать из SQL таблицы поле типа image и показать картинку....
делаю по примеру вот этого v8: Как из 8.0 напрямую работать с некоей базой SQL?

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Stream = Новый COMОбъект("ADODB.Stream");
   Stream.Open();
   
   НомерФото = 0;
   Команда = "select Photo from psa_photo Where GUID = '" + ПСА.Ссылка.УникальныйИдентификатор() + "' and nPhoto = "+НомерФото;
   RecordSet = Новый COMОбъект("ADODB.RecordSet");
   RecordSet.Open(Команда,СКЛСоединение);
   RecordSet.MoveFirst();
   Stream.Write(RecordSet.Fields("Photo").Value);
   Stream.SaveToFile("C:\1\1.jpg");
   Stream.Close();
КонецПроцедуры

ошибка на Stream.Write
Произошла исключительная ситуация (ADODB.Stream): Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.
1 Rustik666
 
15.01.13
12:30
причем интересно что поле
RecordSet.Fields("Photo").Value
имеет тип ComSafeArray и видно его только сразу на точке останова...если начинаешь что-то еще смотреть, то оно сразу же становиться Null....
2 Дык ё
 
15.01.13
12:56
забыл

stream.type = 1; // binary
3 Rustik666
 
15.01.13
22:07
бдин.....че то я намудрил.....нафига тип Image......мучится с ним......Base64Строка() и записал в SQL в поле типа XML.....обычным селектом вытащил и Base64Значение получил фотку....
4 oleg_km
 
15.01.13
22:20
(3) Объем наверное будет раз может в 10 больше, особенно если картинка jpg или png. А так наверное самое изящное решение
5 Rustik666
 
16.01.13
06:17
(4) точно....

тогда если вернуться к image

не могу понять тогда как писать....у меня есть фотка из хмл, я ее перевожу в двоичные данные с помощью Base64Значение() ..... пишу в SQL обычным инсертом....
смотрю таблицу.....там какие-то другие данные.....может писать тоже надо как-то особенно в image....
6 Mikeware
 
16.01.13
07:36
UPDATETEXT
Updates an existing text, ntext, or image field. Use UPDATETEXT to change only a portion of a text, ntext, or image column in place. Use WRITETEXT to update and replace an entire text, ntext, or image field.
7 cw014
 
16.01.13
07:43
Типа "Картинка" в базе данных 1С у 1С нет (вот как сказал то). Есть двоичные данные. В поле binary вначале идут (не помню сколько байт) идентификатор двоичных данных (там всякие BOM символы, UUIDы и т.д.), потом уже картинка. Так что нужно обрезать через SUBSTRING (да, так можно). И еще, если запись в БД была произведена со сжатием, отличным от 0 - картинку из БД не получишь - будет мусор, который надо будет распаковать (как - не знаю)
8 Rustik666
 
16.01.13
10:28
(7) ну да конечно, я имею ввиду двоичные данные....
просто смотрю в отладчике - вижу одни данные.....пишу инсертом в sql и смотрю там.....другое...
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс