Ошибки при работе с большим recordset на Acctss 2003

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
citysoft
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.03.2008 (Вс) 22:17

Ошибки при работе с большим recordset на Acctss 2003

Сообщение citysoft » 15.02.2009 (Вс) 13:55

Здравствуйте!
При размере recordset равным примерно 9000, во время удаления всех записей в цикле
возникает ошибка: run time error -2147217887
Multiple-step OLE DB operation generated errors .......
При чтении тоже возникает ошибка
Что делать ?
Заранее спасибо.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение iGrok » 15.02.2009 (Вс) 14:25

citysoft писал(а):Здравствуйте!
При размере recordset равным примерно 9000, во время удаления всех записей в цикле
возникает ошибка: run time error -2147217887
Multiple-step OLE DB operation generated errors .......
При чтении тоже возникает ошибка
Что делать ?
Заранее спасибо.

А ЗАЧЕМ ты удаляешь ВСЕ записи ЦИКЛОМ??? Ты не знаешь, что такое SQL? И что делает "DELETE FROM [table]"? Или причина в другом?

Ну а насчёт ошибки - показывай код. У меня Access 2003 абсолютно нормально работает с БД на полмиллиона записей..
label:
cli
jmp label

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение alibek » 15.02.2009 (Вс) 15:40

Покажи, как удаляешь.
Lasciate ogni speranza, voi ch'entrate.

citysoft
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.03.2008 (Вс) 22:17

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение citysoft » 15.02.2009 (Вс) 18:26

За DELETE FROM спасибо, как-то вылетело из головы, но при чтении тоже неприятности
Хотелось бы узнать, в чем ошибка

Вот код удаления, он довольно длинный, но как есть

Код: Выделить всё
Dim dataSelect As String, Rec As Recordset
'Создаю Recordset
    dataSelect = "SELECT * FROM Osob  WHERE erase_zap = 1"
    Set Rec = New ADODB.Recordset
    Rec.Open dataSelect, cnctEvolution, adOpenKeyset, adLockOptimistic
    If Rec.RecordCount > 0 Then Call DelRec(Rec)'Вызываю программу удаления Recordset

Sub DelRec(ByVal RecDel As ADODB.Recordset)
'Удаление всех записей в Recordset
'RecDel - Recordset таблицы
  If RecDel.RecordCount = 0 Then Exit Sub
  RecDel.MoveFirst
  Do Until RecDel.EOF  '
         Call DelZap(RecDel)'Вызываю программу удаления  текущей записи
         Loop
End Sub
***********************************
Sub DelZap(ByVal RecDel As ADODB.Recordset)
'Удаление текущей записи в Recordset (если п.п. стоит в цикле DO...Loop, не использовать совместно с MoveNext)
'If .... Call DelZap Else MoveNext
'RecDel - Recordset таблицы
  If RecDel.EOF Then Exit Sub
  RecDel.Delete
  If RecDel.EOF And RecDel.BOF Then Exit Sub
  RecDel.MoveNext
   If RecDel.EOF Then
       RecDel.MovePrevious
                                  End If
End Sub
[Viper] :: Пользуемся тэгом CODE!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение iGrok » 15.02.2009 (Вс) 20:03

citysoft писал(а): Rec.Open dataSelect, cnctEvolution, adOpenKeyset, adLockOptimistic

Меня смущает только adOpenKeyset. Но только потому, что я им никогда не пользовался, и не особо представляю, что это. Всю жизнь юзал только adOpenStatic с клиентским курсором.
Впрочем, судя по описанию, это не должно влиять.

На какой строке ругается на удалении? На RecDel.Delete ?
И покажи, где и на что ругается при чтении.
label:
cli
jmp label

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение SLIM » 16.02.2009 (Пн) 19:49

Ужасный код. Тысяча проверок не понятно зачем непонятно почему....честно пытался разобраться, но не понял основную цепочку событий...понял только идею
1.Открываем записи
2.вызываем процедуру которая в цикле обхода записей вызывает процедуру удаления одной записи


Это все ужастно медленно.
Во-первых не стоит клиентский курсор
Во-вторых зачем тысячу раз проверять Eof?
В-третьих зачем промежуточная процедура DelZap, если можно удалять все в цикле DelRec?
В-четвертых, если не ошибаюсь (а это возможно, ибо так я никогда не удалял), то RS.Delete - это не удаление текущей записи
В-пятых ну правда какой великий смысл удалять таким образом? Просто прочти три страницы по SQL-запросам ив се поймешь. Там оказывается еще и добовлять можно, и удалять, и много многое другой

Ну и хотелось бы посмотреть что происходит при чтениии?

З.Ы. Весь твой код преобразуется в одну строку "DELETE * FROM Osob WHERE erase_zap = 1"....и все ))))
Пишите жизнь на чистовик.....переписать не удастся.....

citysoft
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.03.2008 (Вс) 22:17

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение citysoft » 17.02.2009 (Вт) 18:15

Согласен, что сделано далеко не лучшем образом.
Насчет курсора:
чем плох adOpenKeyset ?
смущает фраза "adOpenStatic с клиентским курсором", вроде бы adOpenStatic сам курсор (статический)
Во-вторых и -третьих не стоит дискуссии
RS.Delete - именно удаление текущей записи
Насчет "DELETE * FROM действительно все работает, однако одной строкой не обойтись:
если создан RS, а потом его надо уничтожить из базы, придется запоминать переменную свыражением "WHERE ......"
Что касается чтения, то это не моя ошибка, я поплакался коллеге а он сказал что у него такое было при чтении

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение iGrok » 17.02.2009 (Вт) 18:50

Чем плох - не знаю. Просто одна из возможных причин такой ошибки - рекордсет не поддерживает операцию удаления.
Так что показывай строку соединения (connection string), и попробуй всё-таки поэкспериментировать с типами курсоров/подключений.
label:
cli
jmp label

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение SLIM » 18.02.2009 (Ср) 3:09

citysoft писал(а):Насчет "DELETE * FROM действительно все работает, однако одной строкой не обойтись:

Двумя строчками
1. Создаем объект Connection со всем примочками
2. Делаем Connection.Execute(SQL-запрос)
citysoft писал(а):если создан RS, а потом его надо уничтожить из базы, придется запоминать переменную свыражением "WHERE ......"

Не совсем понял что именно имеешь в виду. Ну на первый взгляд можно иметь и глобальную переменную с выражением WHERE...., все зависит от ситуации

В любом случае как сказал iGrok - нужна строка коннекта еще

citysoft писал(а):Что касается чтения, то это не моя ошибка, я поплакался коллеге а он сказал что у него такое было при чтении

Ну не знаю....как-то мне приходилось читать базу dbf, которая весила метров 18-20...нормально читает.
Пишите жизнь на чистовик.....переписать не удастся.....

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение Andrey Fedorov » 18.02.2009 (Ср) 8:09

SLIM писал(а):Ну не знаю....как-то мне приходилось читать базу dbf, которая весила метров 18-20...нормально читает.


Мне приходилось работать с MDB-шкой под 2 гига - без проблем...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Ошибки при работе с большим recordset на Acctss 2003

Сообщение SLIM » 19.02.2009 (Чт) 1:08

Andrey Fedorov писал(а):Мне приходилось работать с MDB-шкой под 2 гига - без проблем...

Тем паче :alien:
Пишите жизнь на чистовик.....переписать не удастся.....


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

    TopList