Имя: Пароль:
1C
 
Запись данных типа BLOB в SQL Server через 1С
0 ZanderZ
 
25.09.07
04:46
Есть база где должны храняться сканеные договора и проч. информация в виде типа BLOB(adlongvarbinary) на SQL Server.
Запись идет через хранимую процедуру
типа

CREATE PROCEDURE AddBlob
@Blob image
as begin
 insert Table1 (Scan1)
 values (@Blob)
end
GO

Как из 1С записать Объект в это поле через ADO ???
делаю

   Command = СоздатьОбъект("ADODB.Command");
   Command.ActiveConnection = Connection;
   Command.CommandText = "AddBlob";
   Command.CommandType = 4;
   Parameter = Command.CreateParameter("@Blob",205,1,РазмерФайла,Картинка);
   
   Command.Parameters.Append(Parameter);
   
   Command.Execute();

где РазмерФайла - размер загружаемой картинки , а кртинка - сама картинка
1 ТелепатБот
 
гуру
25.09.07
04:46
2 Shreder
 
25.09.07
09:06
а обязательно через ADO надо?
3 ZanderZ
 
25.09.07
09:09
(2) нет ... просто желательно без ВК
4 774816
 
25.09.07
10:14
так но 1с ка не поддерживает тип перемнных binary

cmd=СоздатьОбъект("ADODB.Command");
con=СоздатьОбъект("ADODB.Connection");
par=СоздатьОбъект("ADODB.Parameter");
im=СоздатьОбъект("ADODB.Stream");
im.Type = 1;
im.Open()                                                                    ;
con.Open("Driver={SQL Server};Server=Server;Database=BaseBase;Uid=sa;Pwd=;");
im.LoadFromFile("c:\im.gif");
cmd.ActiveConnection = con;
cmd.CommandType = 4;
cmd.CommandText = "AddBlob";
par = cmd.CreateParameter("@Blob",205, 1, im.Size, im.Read);
cmd.Parameters.Append(par);
cmd.Execute();
5 ZanderZ
 
25.09.07
10:16
(4) и так пробовал никак... может есть еще варианты как нить обойти?
6 ZanderZ
 
25.09.07
11:06
подниму разок... может кто че подскажет...
7 774816
 
25.09.07
12:21
ну если уж так сильно надо то через скрипт

path = "c:\im.gif"    ;
con = "Driver={SQL Server};Server=Server;Database=BaseBase;Uid=sa;Pwd=;";    
  cod = "Sub LoadImage() " + РазделительСтрок    
   + "Set cmd = CreateObject(""ADODB.Command"") " + РазделительСтрок
   + "Set con = CreateObject(""ADODB.Connection"") " + РазделительСтрок
   + "Set par = CreateObject(""ADODB.Parameter"") " + РазделительСтрок
   + "Set im = CreateObject(""ADODB.Stream"") "+ РазделительСтрок
   + "im.Type = 1 " + РазделительСтрок
   + "im.Open "  + РазделительСтрок
   + "con.Open (" +  Симв(34) + con + Симв(34) + ")" + РазделительСтрок
   + "im.LoadFromFile " + Симв(34) + path + Симв(34) + РазделительСтрок
   + "cmd.ActiveConnection = con " + РазделительСтрок
   + "cmd.CommandType = 4 "  + РазделительСтрок
   + "cmd.CommandText = ""AddBlob"""  + РазделительСтрок
   + "Set par = cmd.CreateParameter(""@Blob"", 128, 1, im.Size, im.Read) "  + РазделительСтрок
   + " cmd.Parameters.Append (par) "   + РазделительСтрок
   + "cmd.Execute"  + РазделительСтрок
   + "end sub"  ;  
  scr = СоздатьОбъект("MSScriptControl.ScriptControl");
   scr.Language = "vbscript";
   scr.AddCode (cod);
   scr.Run("LoadImage");
8 ZanderZ
 
25.09.07
12:38
(7) спасибо !
но он у меня щас и так на скрипте висит
я просто думал как - то из самой 1С можно
9 774816
 
25.09.07
12:45
PS
тип перменной ставь 205 а не 128 размер по больше
cmd.CreateParameter(""@Blob"", 128, 1, im.Size, im.Read)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.