|
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
|
||||
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
|
(14) у Stream есть, не?
http://msdn.microsoft.com/en-us/library/windows/desktop/ms675032(v=vs.85).aspx |
|||
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
|
И то затыки. То в поле не влазит - сразу ошибка лезет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |