ADODB запись в таблицу SQL Server - не пашет #587673


#0 by Иде я?
Подскажите. Пытаюсь записать в таблицу - не записывает. Отрабатывает, но таблица пустая... Set connObj = createObject("ADODB.Connection")   'соединение Set recSetObj = createObject("ADODB.Recordset") ' набор записей connObj.open = "Provider=SQLOLEDB;Initial Catalog =yadro;Data Source =kompsqlexpress;uid=test;pwd=test" Set recSetObj.activeConnection = connObj recSetObj.Open "Contragent",connObj,1,4,2 'rstTitles.Open strSQLTitles, Cnxn, adOpenKeyset, adLockBatchOptimistic, adCmdTable Set view = db.GetView("(Hidden)DBCompanyNameList") Set doc = view.GetFirstDocument While Not(doc Is Nothing)    Company_FullName = doc.GetItemValue("Company_FullName")    Company_Name = doc.GetItemValue("Company_Name")    recSetObj.addnew    recSetObj("Name").value = Cstr(Company_Name)    recSetObj("FullName").value = Cstr(Company_FullName)    recSetObj.Update    Set doc = view.GetNextDocument(doc) Wend recSetObj.UpdateBatch recSetObj.Close connObj.close
#1 by Иде я?
Одааааа детка... Эффект мисты - вдруг появились записи в таблице!
#2 by Иде я?
Теперь затык при записи прикрепленного файла в BLOB поле:    filepath$ = "C: emp" & o.Source Call o.ExtractFile(filepath$)                                 Set mstream = createObject("ADODB.Stream") mstream.Type = 1 mstream.Open mstream.LoadFromFile filepath$ recSetObj.Fields("passport").value = mstream.Read Вот тут вылетает ошибка: Array size exceed maximum limit
#3 by Иде я?
Если сделать msstream.Read(1024)  - нормально проскакивает это место
#5 by Иде я?
Эмпирическим путем установил - read (30000) пашет а 40000 уже нет. Я грусщу.
#6 by Иде я?
Ау, есть спецы по адо по работе с BLOB ?
#7 by aleks-id
а если туда пихнуть не Stream а ComSafeArray ?
#8 by aleks-id
+ кстати, надо recSetObj.Fields("passport").value = mstream.Read без скобок
#9 by Иде я?
Да хрен его знает, есть ли в lotus notes 6/5 этот ComSafeArray
#10 by Иде я?
Щас сделал FSize = o.fileSize filepath$ = "C: emp" & o.Source Call o.ExtractFile(filepath$)                                 mstream.Open mstream.LoadFromFile filepath$ Do While Not (mstream.EOS) recSetObj.Fields("Ustav-passport").AppendChunk = mstream.Read(32000) Loop mstream.close Валиться -Provider - недостаточно памяти для завершения операции
#11 by aleks-id
ты внимательно прочитал? убери скобки!!!
#12 by Кроха
схожая проблема, решили
#13 by Иде я?
Без скобок сразу валится на array size exceed limit
#14 by Иде я?
Так там есть flush а у recordset какой флуш ?
#15 by aleks-id
Dim mstream As New ADODB.Stream ... mstream.Type = 1 mstream.Open mstream.LoadFromFile filepath$ recSetObj.Fields("@passport").value = mstream.Read а так?
#16 by Кроха
у Stream есть, не?
#17 by Иде я?
Не, тоже затык на размер массива. Через appendchuk еще как-то пашет, но тоже вылетает
#18 by Иде я?
Do While Not (mstream.EOS)                                        Print Cstr(Fsize)                                        Fsize=FSize-10000                                        recSetObj.Fields("Ustav-passport").appendchunk =  mstream.Read(1024)                                    Loop mstream.close recSetObj.UpdateBatch Вылетает с : Microsoft OLE DB Provider for SQL Server: При вызове ITransaction::Commit или ITransaction::abort объект не отвечает на запросы
#19 by Иде я?
при чем вылетело msstream.close или
#20 by Иде я?
Убрал из цикла updatebatch  - пока пошло надеюсь памяти хватит
#21 by Иде я?
Вылетело - недостаточно памяти для завершения операции :( лотус сожрал почти 2 гига
#22 by aleks-id
какой размер файла?
#23 by Иде я?
файлов 6 тыщ от 200 кило до 14 мегов
#24 by Кроха
c EOS Read или Read(-1) не пробовал?
#25 by Иде я?
Не, щас начало пахать...3 гига памяти выжрало, жду вывалится или нет Перезапустил клиента лотус - он скотина память не отдавал.
#26 by Иде я?
скотина, таки недостаточно памяти для завершения операции...
#27 by Иде я?
Щас попробую каждый раз connect делать к серверу каждые 20 документов
#28 by Иде я?
Ваши ставки господа - прошло или нет ?
#29 by aleks-id
если после каждого файла делать апдейт рекордсету - должно взлететь
#30 by Иде я?
Да хрен там. Пробовал после каждой записи делать updatebatch не фурычит. Щас каждые 10 документов переподключаюсь - все равно вылетело. причем вылетело в момент записи большого документа
#31 by Иде я?
Хотя последний документ 3 мега
#32 by Иде я?
Щас текст приведу. Set db = New NotesDatabase( "", "d:asaasa1.nsf" )  ' открываем базу контрагентов Set connObj = createObject("ADODB.Connection")   'соединение Set recSetObj = createObject("ADODB.Recordset") ' набор записей Set mstream = createObject("ADODB.Stream") mstream.Type = 1 Set view = db.GetView("(Hidden)DBCompanyNameList") Set doc = view.GetFirstDocument ii=0 While Not(doc Is Nothing) If ii=0 Then connObj.open = "Provider=SQLOLEDB;Initial Catalog =yadro;Data Source =komp1sqlexpress;uid=user1;pwd=parol1" Set recSetObj.activeConnection = connObj recSetObj.Open "Contractors",connObj,1,3,2 End If ii=ii+1 recSetObj.addnew Company_FullName = doc.GetItemValue("Company_FullName") Company_Name = doc.GetItemValue("Company_Name") If Doc.HasItem("Status") Then status = Cstr(doc.GetItemValue("Status")) If(doc.Hasembedded) And (status="1")  Then  If Doc.HasItem("ustav") Then   Set rtitem = doc.GetFirstItem( "ustav" )   If Not (Isempty(rtitem.EmbeddedObjects)) Then    If ( rtitem.Type = RICHTEXT ) Then    Forall o In rtitem.EmbeddedObjects    If ( o.Type = EMBED_ATTACHMENT )  Then          FSize = o.fileSize          filepath$ = "C: emp" & o.Source          Call o.ExtractFile(filepath$)                                          mstream.type =1          mstream.Open          mstream.LoadFromFile filepath$          Print filepath$           Do While Not (mstream.EOS)            Print Cstr(Fsize)        Fsize=FSize-30240      recSetObj.Fields("Ustav-passport").appendchunk =  mstream.Read(30240)    Loop        mstream.close    End If    End Forall    End If         End If     End If End If End If Print "  " & Cstr(Company_FullName) recSetObj("Name_br").value = Cstr(Company_Name) recSetObj("FullName_br").value = Cstr(Company_FullName) If ii=20 Then ii=0 recSetObj.UpdateBatch recSetObj.Close connObj.close End If Set doc = view.GetNextDocument(doc) Wend recSetObj.UpdateBatch recSetObj.Close connObj.close ErrorLab:    'Msgbox "Error #" + Cstr(Err) + " in " + Cstr(Getthreadinfo) + "(" + Cstr(Erl) + ") : " + Error, 48, "Ошибка исполнения"    Print "Error #" + Cstr(Err) + " in " + Cstr(Getthreadinfo) + "(" + Cstr(Erl) + ") : " + Error    Exit Sub
#33 by aleks-id
ты проверь на чем оно валится. отключи пока запись в базу и только читай в стрим, а потом сохраняй стрим в другую папку. если это взлетит - значит проблема в провайдере бд
#34 by Иде я?
Валиться в  recSetObj.Fields("Ustav-passport").appendchunk =  mstream.Read(30240) Читает файл 2-4 мега, и в какой-то момент, на энном чтении-записи вылетает.
#35 by Иде я?
Вылетает провайдер, это точно
#36 by aleks-id
а если
#37 by Иде я?
и где там драйвер ? Не, работать извне с лотусом то еще извращение. Пока выход нашел в выгрузке по частям. Выгрузил 100 документов, поправил базу, перезашел - дальше выгрузил. ЗАтык с массивом ранее был из за ограничения лотуса в 64 килобайта на массив. кароче здравствуй попа-новый год. Уже думаю выгружать в файло все и потом писать зарузку из файла
#38 by Иде я?
Вот гомосяцкие гомосеки: При использовании метода AppendChunk объекта ADODB.Recordset, возникает следующее сообщение об ошибке: Недостаточно памяти для завершения операции.. Чтобы обойти эту проблему, воспользуйтесь одним из приведенных ниже способов. Открытие объекта ADODB.Connection и задайте для свойства CursorLocation adUseClient и использовать это подключение с помощью ADODB.Recordset. -ИЛИ- Использовать только один вызов AppendChunk и добавления всех данных с одним вызовом AppendChunk. Обратите внимание, что это ограничивает вас до размера максимального блока 511818 байтов.
#39 by Иде я?
Это я уже на 2008R2 запустил, один хрен вылетело, ладно хоть на ангийском ошибка - позволило найти багу
#40 by Иде я?
Сижу бодаюсь с хранимой процедурой пока не пашет, пишет : ADODB.Command Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом
#41 by Иде я?
Этот ипучий лотус даже с параметрами хрен чо сделаешь mstream1.type =1 mstream1.Open mstream1.LoadFromFile filepath$ Set par1 = cmd.CreateParameter("@Blob",204,1 ,mstream1.Size, mstream1.Read) И тут ошибка Array size exceed limit !!!! cmd.Parameters.Append(par1) cmd.Execute Cmd.Parameters.Clear
#42 by Иде я?
Ну чо - через appendchunk добавил таки в параметр щас запустил, проверяцца
#43 by Иде я?
один хрен вылетела на 2500 документах экароче адо это жопа
#44 by Иде я?
Короче как лотус выжирает 2 гига памяти, так вылетает ошибка Жость.
#45 by ДенисЧ
А что, кусками грузить никак?
#46 by Иде я?
Прийдется. Фишка в том, что даже пересоздавая connection и recordset каждые 300 документов - оно выжирает всю память и вылетает щас попробую через хранимые процедуры кусками
#47 by Иде я?
Вдиспетчере задач Ошибок страниц более 20 миллионов
#48 by Иде я?
Щас все курочу. Решили выгружать файло с UID и потом отдельно грузить его в BLOB поле. Только имя файла сажать в базу
#49 by Иде я?
И то затыки. То в поле не влазит - сразу ошибка лезет
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С