| 
    
        
     
     | 
    
  | 
Запись данных типа 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)  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |