Имя: Пароль:
IT
 
ADODB запись в таблицу SQL Server - не пашет
,
0 Иде я?
 
модератор
28.12.11
17:02
Подскажите. Пытаюсь записать в таблицу - не записывает.
Отрабатывает, но таблица пустая...
Set connObj = createObject("ADODB.Connection")   'соединение
Set recSetObj = createObject("ADODB.Recordset") ' набор записей
connObj.open = "Provider=SQLOLEDB;Initial Catalog =yadro;Data Source =komp\sqlexpress;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")(0)
   Company_Name = doc.GetItemValue("Company_Name")(0)
   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 Иде я?
 
модератор
28.12.11
17:02
Одааааа детка... Эффект мисты - вдруг появились записи в таблице!
2 Иде я?
 
модератор
29.12.11
11:50
Теперь затык при записи прикрепленного файла в BLOB поле:    filepath$ = "C:\temp\" & 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 Иде я?
 
модератор
29.12.11
11:50
Если сделать msstream.Read(1024)  - нормально проскакивает это место
5 Иде я?
 
модератор
29.12.11
13:55
Эмпирическим путем установил - read (30000) пашет
а 40000 уже нет.
Я грусщу.
6 Иде я?
 
модератор
29.12.11
14:16
Ау, есть спецы по адо по работе с BLOB ?
7 aleks-id
 
29.12.11
14:20
а если туда пихнуть не Stream а ComSafeArray ?
8 aleks-id
 
29.12.11
14:25
+(7) кстати, надо recSetObj.Fields("passport").value = mstream.Read без скобок
9 Иде я?
 
модератор
29.12.11
14:45
Да хрен его знает, есть ли в lotus notes 6/5 этот ComSafeArray
10 Иде я?
 
модератор
29.12.11
14:53
Щас сделал FSize = o.fileSize
filepath$ = "C:\temp\" & 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 aleks-id
 
29.12.11
15:04
(10) ты (8) внимательно прочитал? убери скобки!!!
12 Кроха
 
29.12.11
15:05
схожая проблема, решили

http://www.programmingforum.ru/asp/thread893054.html
13 Иде я?
 
модератор
29.12.11
15:05
Без скобок сразу валится на array size exceed limit
14 Иде я?
 
модератор
29.12.11
15:12
Так там есть flush
а у recordset какой флуш ?
15 aleks-id
 
29.12.11
15:17
Dim mstream As New ADODB.Stream
...
mstream.Type = 1
mstream.Open
mstream.LoadFromFile filepath$
recSetObj.Fields("@passport").value = mstream.Read
а так?
16 Кроха
 
29.12.11
15:18
17 Иде я?
 
модератор
29.12.11
15:46
(15) Не, тоже затык на размер массива.
Через appendchuk еще как-то пашет, но тоже вылетает
18 Иде я?
 
модератор
29.12.11
15:48
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 Иде я?
 
модератор
29.12.11
15:49
при чем вылетело msstream.close или
20 Иде я?
 
модератор
29.12.11
15:50
Убрал из цикла updatebatch  - пока пошло
надеюсь памяти хватит
21 Иде я?
 
модератор
29.12.11
15:52
Вылетело - недостаточно памяти для завершения операции :(
лотус сожрал почти 2 гига
22 aleks-id
 
29.12.11
16:03
какой размер файла?
23 Иде я?
 
модератор
29.12.11
16:08
файлов 6 тыщ от 200 кило до 14 мегов
24 Кроха
 
29.12.11
16:32
c EOS Read() или Read(-1) не пробовал?
25 Иде я?
 
модератор
29.12.11
16:40
Не, щас начало пахать...3 гига памяти выжрало, жду вывалится или нет
Перезапустил клиента лотус - он скотина память не отдавал.
26 Иде я?
 
модератор
29.12.11
16:55
скотина, таки недостаточно памяти для завершения операции...
27 Иде я?
 
модератор
29.12.11
17:00
Щас попробую каждый раз connect делать к серверу
каждые 20 документов
28 Иде я?
 
модератор
30.12.11
08:16
Ваши ставки господа - прошло или нет ?
29 aleks-id
 
30.12.11
08:17
если после каждого файла делать апдейт рекордсету - должно взлететь
30 Иде я?
 
модератор
30.12.11
08:47
(29) Да хрен там. Пробовал после каждой записи делать updatebatch
не фурычит.
Щас каждые 10 документов переподключаюсь - все равно вылетело.
причем вылетело в момент записи большого документа
31 Иде я?
 
модератор
30.12.11
08:48
Хотя последний документ 3 мега
32 Иде я?
 
модератор
30.12.11
08:55
Щас текст приведу.
Set db = New NotesDatabase( "", "d:\basa\basa1.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 =komp1\sqlexpress;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")(0)
Company_Name = doc.GetItemValue("Company_Name")(0)

If Doc.HasItem("Status") Then
status = Cstr(doc.GetItemValue("Status")(0))
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:\temp\" & 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(1)) + "(" + Cstr(Erl) + ") : " + Error, 48, "Ошибка исполнения"
   Print "Error #" + Cstr(Err) + " in " + Cstr(Getthreadinfo(1)) + "(" + Cstr(Erl) + ") : " + Error
   Exit Sub
33 aleks-id
 
30.12.11
09:30
ты проверь на чем оно валится. отключи пока запись в базу и только читай в стрим, а потом сохраняй стрим в другую папку. если это взлетит - значит проблема в провайдере бд
34 Иде я?
 
модератор
30.12.11
12:33
Валиться в  recSetObj.Fields("Ustav-passport").appendchunk =  mstream.Read(30240)
Читает файл 2-4 мега, и в какой-то момент, на энном чтении-записи вылетает.
35 Иде я?
 
модератор
02.01.12
15:01
Вылетает провайдер, это точно
36 aleks-id
 
02.01.12
15:10
37 Иде я?
 
модератор
03.01.12
12:22
(36) и где там драйвер ?
Не, работать извне с лотусом то еще извращение.
Пока выход нашел в выгрузке по частям. Выгрузил 100 документов, поправил базу, перезашел - дальше выгрузил.
ЗАтык с массивом ранее был из за ограничения лотуса в 64 килобайта на массив.
кароче здравствуй попа-новый год.
Уже думаю выгружать в файло все и потом писать зарузку из файла
38 Иде я?
 
модератор
03.01.12
15:18
Вот гомосяцкие гомосеки:

http://support.microsoft.com/?kbid=182423
При использовании метода AppendChunk объекта ADODB.Recordset, возникает следующее сообщение об ошибке:
Недостаточно памяти для завершения операции..

Чтобы обойти эту проблему, воспользуйтесь одним из приведенных ниже способов.

Открытие объекта ADODB.Connection и задайте для свойства CursorLocation adUseClient и использовать это подключение с помощью ADODB.Recordset. -ИЛИ-

Использовать только один вызов AppendChunk и добавления всех данных с одним вызовом AppendChunk. Обратите внимание, что это ограничивает вас до размера максимального блока 511818 байтов.
39 Иде я?
 
модератор
03.01.12
15:19
Это я уже на 2008R2 запустил, один хрен вылетело, ладно хоть на ангийском ошибка - позволило найти багу
40 Иде я?
 
модератор
04.01.12
13:52
Запись данных типа BLOB в SQL Server через 1С
Сижу бодаюсь с хранимой процедурой
пока не пашет, пишет :
ADODB.Command Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом
41 Иде я?
 
модератор
04.01.12
15:24
Этот ипучий лотус даже с параметрами хрен чо сделаешь
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 Иде я?
 
модератор
04.01.12
15:44
Ну чо - через appendchunk добавил таки в параметр
щас запустил, проверяцца
43 Иде я?
 
модератор
04.01.12
17:17
один хрен вылетела на 2500 документах
экароче адо это жопа
44 Иде я?
 
модератор
04.01.12
17:23
Короче как лотус выжирает 2 гига памяти, так вылетает ошибка
Жость.
45 ДенисЧ
 
04.01.12
17:24
А что, кусками грузить никак?
46 Иде я?
 
модератор
04.01.12
17:26
(45) Прийдется. Фишка в том, что даже пересоздавая connection и recordset каждые 300 документов - оно выжирает всю память и вылетает
щас попробую через хранимые процедуры кусками
47 Иде я?
 
модератор
04.01.12
17:43
Вдиспетчере задач Ошибок страниц более 20 миллионов
48 Иде я?
 
модератор
10.01.12
16:30
Щас все курочу. Решили выгружать файло с UID и потом отдельно грузить его в BLOB поле. Только имя файла сажать в базу
49 Иде я?
 
модератор
10.01.12
16:31
И то затыки. То в поле не влазит - сразу ошибка лезет
Независимо от того, куда вы едете — это в гору и против ветра!