Имя: Пароль:
1C
1С v8
Как записать картинку во внешнюю SQL базу
0 ЭЦ
 
11.01.13
15:14
Господа !
Есть необходимость обработкой писать данные во внешнюю базу MS SQL.
Все типы пишутся нормально, но записать картинку в Blob поле не получается.
Прошу подсказать рабочий пример.
Спасибо
1 mikecool
 
11.01.13
15:15
http://www.1c-galaxy.ru/forum4/topic410837/
первая ссылка по красной Я
2 pessok
 
11.01.13
15:20
(1) там вроде не решили :)
(0) в блоб у меня тоже не писалось как-то, в итоге клали на фтп, а вместо блоба сделали стринг с названием картинки. уже потом веб-сервис грузил на сайт с фтп
3 ЭЦ
 
11.01.13
15:20
насчет первой ссылке - не понял, а за пример спасибо щас будем пробовать
4 mikecool
 
11.01.13
15:21
(2) а я не разбирал, просто механизм немного путанный, но когда то сам делал и все работало
5 mikecool
 
11.01.13
15:21
+4 отличие есть в методике заливки через разные провайдеры
6 pessok
 
11.01.13
15:22
(4) а вот у меня вроде не писало... а может и писало, но сайтостроители не могли блоб разобрать... не помню, помню, что делали фтп :)
7 ЭЦ
 
12.01.13
17:28
ЕСли кому интересно то вот так пишет :

Попытка
   Поток = Новый COMОбъект("ADODB.Stream");
   Поток.Type = 1;
   Поток.Mode = 3;
   Поток.Open();
   Поток.LoadFromFile(фИмяФайла);

   ЗагружаемыйФайл = Новый ДвоичныеДанные(фИмяФайла);

   Команда = Новый COMОбъект("ADODB.Command");
   Команда.ActiveConnection = SQLСоединение;
   Команда.NamedParameters = True;
   Команда.CommandType = 1;
   Команда.CommandText = "UPDATE Anketa SET Anketa.Anketa_Pic = ? WHERE Anketa.Anketa_Guid = '395e5380-44fa-11e1-9025-00155dc80406'";
   ПараметрSQL=Команда.CreateParameter("@Pic", 205, 1,10000,Поток.Read());
   
   Поток.Close();
   
   Команда.Parameters.Append(ПараметрSQL);
     Команда.Execute();    
   
   Исключение
       Сообщить("НЕУДАЧНАЯ ПОПЫТКА ЗАПИСИ ИЗОБРАЖЕНИЯ !",СтатусСообщения.Важное);
       Сообщить("  описание = " + ОписаниеОшибки());
   КонецПопытки;
   SQLСоединение.Close();
8 mikecool
 
12.01.13
17:30
(7) нормально так ))
а ЗагружаемыйФайл = Новый ДвоичныеДанные(фИмяФайла); зачем?
9 mikecool
 
12.01.13
17:32
и вопрос: вот это нельзя было сократить?
   Поток.Open();
   Поток.LoadFromFile(фИмяФайла);
   Поток.Read()
может там все в одну строку делается...
10 vde69
 
12.01.13
18:23
(7) с большими файлами будут проблеммы

более правильно использовать спец оператор AppendChunk   который "кусочками" отправляет данные

пример вот тут http://infostart.ru/public/16687/ только тип поля там в базе другой но будет работать и с имж
11 ЭЦ
 
12.01.13
19:17
Господа
Я Вам выложил работающий пример
если есть желание улучшить - то улучшите и выложите работающий код.
Это будет правильно
12 ЭЦ
 
12.01.13
19:18
Например хотелось бы юзать параметр по наименованию а не по номеру.
13 vde69
 
12.01.13
21:15
(11) ты в своем примере не сможешь залит файл в 100 метров, ну не сможешь по определению и даже в 10 метров скорее всего не сможешь и дажу в 1 метр зальешь только если на сервере будет дофига памяти....
14 Jofa
 
12.01.13
21:32
(13)Напиши свой пример
15 vde69
 
12.01.13
22:08
16 vde69
 
12.01.13
22:11
(15) + сам офигел, пример 7 ми летней давности
17 Jofa
 
12.01.13
22:17
(15)Таким образом любой файл можно записать?
18 vde69
 
12.01.13
22:42
(17) в разумных пределах, сколько сам скуль тянет
19 Jofa
 
13.01.13
12:32
(18)Что ты подразумваешь под "сам скуль тянет"?
20 vde69
 
13.01.13
18:03
(19) у самого скуля есть ограничения на размер поля имж, на память не помню какие, да и от версий вроде зависит вообще максимальный размер базы, например на стандарт едишен теробайный имдж не возмет по определению...