Имя: Пароль:
1C
 
Как через ADODB работать с полями типа image на MS-SQL ?
0 alex4x
 
21.02.06
16:27
Бьюсь над простой задачей - закачать картинку из 1С-8.0 через ADODB на SQL сервер и получить ее потом оттуда.

Картинка= ЭлементыФормы["Рисунок1"].Картинка;
ДвоичныеДанные=Картинка.ПолучитьДвоичныеДанные();
Не помогают, в параметре запроса при попытке insert-a эти данные не прокатывают.

Пытался сделать по аналогии с
http://www.rsdn.ru/Forum/Info.aspx?name=FAQ.db.mssql.blobs

Но тоже ничего не получается.
1 АперБот
 
21.02.06
18:13
Не сердитесь на меня, за то, что я поднимаю ветки, я всего лишь бот. Все претензии к моему автору - Волшебнику. Мои сообщения - это его сообщения.
2 alex4x
 
22.02.06
12:30
up
3 Парижская фанера
 
22.02.06
12:31
Это не бот а Павлик Морозов - стучит на папашу...
4 vde69
 
22.02.06
12:37
извиняюсь но код 7.7 (кроме того поле должно быть последним в базе)


Функция ПолучитьФайл(Connection, Идентификатор, Файл)
   Command = СоздатьОбъект("ADODB.Command");
   Command.ActiveConnection=Connection;
   Command.CommandType=1;
   Command.CommandText="select ID_, FileName_, ID_source_, FileData_ from s_file_ where ID_ = '"+Идентификатор+"' AND FileName_='"+Файл+"'";
   Try
       Set=Command.Execute();
   Except
       Предупреждение(ОписаниеОшибки());
       Возврат -1;
   EndTry;  
   
   Если Set.EOF()<>-1 Тогда
       Возврат Строка(Set.Fields("FileData_").Value);
   КонецЕсли;
   Возврат -1;    
КонецФункции

Функция ЗаписатьФайл(Connection, Идентификатор, Файл, Данные, Источник)
   сп = ПолучитьСписокФайлов(Connection, Идентификатор);
   Если сп = -1 тогда
       возврат -1;
   КонецЕсли;
   
   сп1=СоздатьОбъект("СписокЗначений");
   ф=СоздатьОбъект("Справочник.Контрагенты");
   ИмяФайла2="";
   Пока (сп.РазмерСписка()>0) Цикл
       сп1.ИзСтрокиСРазделителями(сп.ПолучитьЗначение(1));
       Идентификатор                =СокрЛП(Строка(сп1.ПолучитьЗначение(1)));
       ИмяФайла                    =СокрЛП(Строка(сп1.ПолучитьЗначение(2)));
       ИдентификаторИсточника        =СокрЛП(Строка(сп1.ПолучитьЗначение(3)));
       Если (СокрЛП(ИмяФайла)=СокрЛП(Файл))и(СокрЛП(ИдентификаторИсточника)=СокрЛП(Источник)) тогда
           ИмяФайла2=Строка(сп.ПолучитьЗначение(1));
       КонецЕсли;
       сп.УдалитьЗначение(1);
   КонецЦикла;
     
   rsWrite = СоздатьОбъект("ADODB.RecordSet");
   rsWrite.ActiveConnection=Connection;
   rsWrite.CursorType = 1;
   rsWrite.LockType = 3;  
   РазмерПередачи = 10000;
   
   КоличествоПакетов=Цел(СтрДлина(Данные) / Число(РазмерПередачи))+1;
   Если КоличествоПакетов > 20 тогда
       Коэфф=КоличествоПакетов/20;
   Иначе
       Коэфф=1;
   КонецЕсли;
   
   ТекущийПакет=0;

   Try  
       Command = СоздатьОбъект("ADODB.Command");
       Command.ActiveConnection = Connection;
       Command.CommandType=1;  
       
       Connection.BeginTrans();
       
       Если ИмяФайла2="" тогда  
           Command.CommandText="INSERT INTO s_file_ (ID_, FileName_, ID_source_, FileData_) VALUES (
           | '" + Идентификатор + "',
           | '" + Файл + "',
           | '" + Источник + "',
           | '') ";            
           Command.Execute();
       КонецЕсли;  
       
       rsWrite.Open("SELECT * from s_file_ where ID_='"+Идентификатор+"' AND FileName_='"+Файл+"' AND ID_source_='"+ Источник+"'");
       rsWrite.fields("ID_").Value=Идентификатор;
       rsWrite.fields("FileName_").Value=Файл;
       rsWrite.fields("ID_source_").Value=Источник;
       Пока СтрДлина(Данные)>0 Цикл  
           ТекущийПакет=ТекущийПакет+1;
           ДампДанных=Лев(Данные,РазмерПередачи);
           Данные=Прав(Данные, СтрДлина(Данные)-РазмерПередачи);
           rsWrite.fields("FileData_").AppendChunk(ДампДанных);
           Состояние("Идет передача файла " + ГлИндикатор(ТекущийПакет,КоличествоПакетов));
       КонецЦикла;  
       Состояние("Идет завершение передачи файла ");
       rsWrite.Update();
       rsWrite.Close();    
       Connection.CommitTrans();
   Except
       Connection.RollbackTrans();
       Предупреждение(ОписаниеОшибки());
       Возврат -1;
   EndTry;  

   Возврат 1;    
КонецФункции
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан