Имя: Пароль:
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) у самого скуля есть ограничения на размер поля имж, на память не помню какие, да и от версий вроде зависит вообще максимальный размер базы, например на стандарт едишен теробайный имдж не возмет по определению...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn