Имя: Пароль:
1C
1С v8
Двоичные данные 1С -> MSSQL
0 danilin
 
30.10.11
23:11
Подскажите, пожалуйста, какой тип данных указать столбцу таблицы sql  для последующего insert-a двоичных данных 1с
1 Mnemonic1C
 
30.10.11
23:13
А что это будет если не секрет? Ну есть несколько типов для хранения бинарных данных
2 H A D G E H O G s
 
31.10.11
01:06
image
3 Diabolicum 1C
 
31.10.11
07:36
varbinary(max)
4 danilin
 
31.10.11
16:44
спасибо за ответы, но напрямую записывать тоже не дает, просит использовать функцию CONVERT - никто не сталкивался?
5 danilin
 
31.10.11
16:56
Просто двоичные данные 1С (FF D8 FF E0...) не лезут в varbinary(max).
Но записываются varchar(max). Чем-нибудь чревато?
6 danilin
 
31.10.11
18:30
Файл = Новый ДвоичныеДанные(ФайлНаДиске);
Команда.CommandText = "insert into files (ID,_F) values('000001',"+Файл+")";

_F - имеет тип varbinary(MAX). Пишет несовместимый тип.
Помогите, пожалуйста, замылился глаз.
7 Fragster
 
гуру
31.10.11
18:55
пихай блоб через base64
8 danilin
 
31.10.11
19:02
>>2 по совету и поиску сделал так
получил объект COMSafeArray, а вот как его обратно в ДвоичныеДанные?
9 danilin
 
31.10.11
19:29
сделал через
Stream=Новый COMОбъект("ADODB.Stream");
Stream.Type=1;
Stream.Open();
Stream.Write(RS.Fields("_F").Value);
Stream.SaveToFile("c:\БылЗвонокВост.jpg");

не сработало
10 danilin
 
31.10.11
20:13
Команда = Новый ComObject("ADODB.Command");
Команда.CommandText = "select _F from dbo.files where sgm_ID = '0001'";
Команда.ActiveConnection = Подключение;
RS = Новый COMОбъект("ADODB.Recordset");
RS.Open(Команда);
RS.MoveFirst();  

Stream=Новый COMОбъект("ADODB.Stream");
Stream.Type=1;
Stream.Open();
Stream.Write(RS.Fields("_F").Value);
Stream.SaveToFile("c:\test.jpg");


_F столбец имеет тип данных image.
Что я делаю не так?
11 H A D G E H O G s
 
31.10.11
20:34
Stream=Новый COMОбъект("ADODB.Stream");
   Stream.Type=1;
   Stream.Open();
   Connection=Новый COMОбъект("ADODB.Connection");
   Connection.Open("Provider=SQLOLEDB.1; Data Source=NEXTGEN; Initial Catalog=MyBase; User ID=sa;");
   RecordSet=Новый COMОбъект("ADODB.Recordset");
   RecordSet.CursorLocation=3;
   RecordSet.LockType=2;
   Запрос="Select data from dbo.MyTable";
   RecordSet.Open(Запрос, Connection);
   RecordSet.MoveFirst();
   Stream.Write(RecordSet.Fields("Data").Value);
   Stream.SaveToFile("c:\БылЗвонокВост.bmp");
   Stream.Close();


У меня вот такое работало.
12 H A D G E H O G s
 
31.10.11
20:34
Ах тыж мой пример юзал уже!
13 H A D G E H O G s
 
31.10.11
20:35
А как в image сохраняешь?
14 danilin
 
31.10.11
20:38
Сохраняю так:
Файл = Новый ДвоичныеДанные(ФайлДляЗагрузки);
Команда = Новый ComObject("ADODB.Command");
Команда.CommandText = "insert into dbo.files (_ID,_F) values('0001','"+Файл+"')";
Команда.ActiveConnection = Подключение;
Команда.CommandType = 1;
Команда.Execute();
15 H A D G E H O G s
 
31.10.11
23:21
Файл - что такое?
16 Fragster
 
гуру
01.11.11
09:12
(15) файл преобразуется в строку "файл". мой пост (7) был пропущен ;)
17 Fragster
 
гуру
01.11.11
09:12
или в "двоичные данные" что не суть