Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Silmaril
1 / 1 / 0
Регистрация: 29.04.2015
Сообщений: 87
#1

Ошибка 3704 - Операция не допускается, если объект закрыт - MS Access

03.12.2015, 09:14. Просмотров 1468. Ответов 9
Метки нет (Все метки)

Такая ситуация - происходит коннект к внешней базе через коннект отправляется sql запрос, объект rs =New ADODB.Recordset, затем, при методе "Do while not rs.EOF" возникает ошибка 3704, но если перед циклом поставить задержку в секунду то, запрос нормально пробегается, такое ощущение, что не хватает времени для открытия запроса. Но ставить задержку в секунду как-то накладно, если необходимо 1000 раз обращаться, то это уже 1000 секунд задержки просто так. Как можно победить данную ошибку?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2015, 09:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка 3704 - Операция не допускается, если объект закрыт (MS Access):

Ошибка авторизации "Операция не допускается, если объект открыт"
В бд хранятся пользователи и пароли.Для авторизации в приложении использую код...

"Операция не допускается если объект открыт", БД
При компиляции в билдере или при запуске .exe выводит ошибку При следующей...

Ошибка при навигации по DataSet: объект закрыт
У меня БД подключается, как нажимаю вывести таблицу БД он выводит такую ошибку...

Операция не допускается в данном контексте
В данной статье http://www.delphikingdom.com/asp/viewitem.asp?catalogid=408 ...

Почему закрыт объект RecordSource?
мне нуижно запросом выбрать некоторые значения из таблиц, потом каждое из этих...

Если указанный байт выше 1F или 31, тогда закрыт форму
если указанный байт выше 1F или 31 тогда закрыт форму искал не нашел может...

9
alvk
Эксперт MS Access
5541 / 3439 / 166
Регистрация: 12.08.2011
Сообщений: 8,682
03.12.2015, 10:05 #2
А если ошибку игнорировать, всё работает как надо?
0
Silmaril
1 / 1 / 0
Регистрация: 29.04.2015
Сообщений: 87
03.12.2015, 10:06  [ТС] #3
да, но при этом нужно идти в Debug и продолжить выполнение, т.е. происходит задержка, я поставил перед циклом задержку на 0.6 секунд и вроде не вылетает, но это костыль какой-то получается
0
mobile
Эксперт MS Access
22494 / 12812 / 2612
Регистрация: 28.04.2012
Сообщений: 14,014
03.12.2015, 10:08 #4
Попробуйте использовать DoEvents
Visual Basic
1
2
3
4
5
6
On error resume next
nextp:
x=rs(0)
if err<>0 Then DoEvents: goto nextp 'Если ошибка, то еще попытка обратиться к данным
on error goto 0                     'Ошибки нет, входим в обычную работу
Do while not rs.EOF
1
shanemac51
Модератор
Эксперт MS Access
7768 / 2986 / 423
Регистрация: 07.08.2010
Сообщений: 8,140
Записей в блоге: 1
03.12.2015, 10:20 #5
не помешает вставить счетчик повторов, иначе можно зациклиться
0
Silmaril
1 / 1 / 0
Регистрация: 29.04.2015
Сообщений: 87
03.12.2015, 10:43  [ТС] #6
Спасибо! Получается, но немного изменил:

Visual Basic
1
2
3
4
5
6
7
8
9
On error resume next
nextp:
x=rs(0)
if (err<>0) and (err<>3021) Then ' добавил обход ошибки 3021, т.е. если в запросе нет записей по данному фильтру, хотя непонятно почему тогда такие в запрос попадают, и тоже происходит зацикливание
Err=0 ' иначе значение ошибки не обнуляется и идёт зацикливание
DoEvents: goto nextp 'Если ошибка, то еще попытка обратиться к данным
Endif
on error goto 0                     'Ошибки нет, входим в обычную работу
Do while not rs.EOF
0
shanemac51
Модератор
Эксперт MS Access
7768 / 2986 / 423
Регистрация: 07.08.2010
Сообщений: 8,140
Записей в блоге: 1
03.12.2015, 10:54 #7
Лучший ответ Сообщение было отмечено Silmaril как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
On error resume next
kcycle=0
nextp:
x=rs(0)
if (err<>0) and (err<>3021) Then ' добавил обход ошибки 3021, т.е. если в запросе нет записей по данному фильтру, 
kcycle=kcycle+1
 
if kcycle>10 then
''''''''''''''''''''''''''
msgbox "что делать --нет связи"
exit sub
endif
 
 
хотя непонятно почему тогда такие в запрос попадают, и тоже происходит зацикливание
Err=0 ' иначе значение ошибки не обнуляется и идёт зацикливание
DoEvents: goto nextp 'Если ошибка, то еще попытка обратиться к данным
Endif
on error goto 0                     'Ошибки нет, входим в обычную работу
Do while not rs.EOF
1
Silmaril
1 / 1 / 0
Регистрация: 29.04.2015
Сообщений: 87
03.12.2015, 10:59  [ТС] #8
Спасибо! Точно! Нужная вещь о количестве повторов, т.к. я не задумался, что связи может не быть
0
texnik-san
шапоклякистка 8-го дня
3629 / 2190 / 389
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
03.12.2015, 11:00 #9
Помнится, читала я в какой-то из рекомендованый mobile книг, что для отлавливания такой ситуации есть свойство .State у ADODB.Recordset - оно меняется, когда рекордсет уже открыт и готов к работе.

Честно говорю, что сама еще не пробовала (повода не было), просто отложилось в памяти.
1
Silmaril
1 / 1 / 0
Регистрация: 29.04.2015
Сообщений: 87
03.12.2015, 11:09  [ТС] #10
Да, тоже имеет место быть, когда State = 1 то всё готово, но State в условии существенно увеличивает время обработки
0
03.12.2015, 11:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2015, 11:09
Привет! Вот еще темы с решениями:

Ошибка в XML: не допускается употребление элемента в этом контексте
Доброго всем дня! Есть схема &lt;?xml version=&quot;1.0&quot;?&gt; &lt;xs:schema...

Если объект добавлять в 2 контейнера, то в них будет ссылка или новый объект?
Есть объект - obj. Последовательно добавляю его в два контейнера ...

Как сделать возможной печать на одном МФУ, если главный компьютер закрыт паролем?
Доброго времени суток, уважаемые форумчане! Прошу прощения, что обращаюсь со...

Как создать объект оператором new, если имеется только тип указателя на объект, переданный через шаблон?
Есть шаблон. Точно известно, что его параметр Т это указатель. Как с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru