powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка во время многошаговой операции...
38 сообщений из 38, показаны все 2 страниц
Ошибка во время многошаговой операции...
    #32926617
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользуюсь ADO для доступа к СУБД Jet. Получаю рекордсет через select, далее добавляю к нму запись через
rs.AddNew()

И делаю rs.Update. Всё это находится внутри транзакции.

Так вот - иногда при Update'е вылетает ошибка 0x80040e21. Можно ли как-нибудь получить более подробную информацию в чём именно дело и куда вообще копать ? Сижу мучаюсь - разобраться из=за чего именно проблематично так как ошибка нечастая и проект большой :(
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926647
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А текст ошибки какой?
(в коллекции Connection.Errors)
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926655
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926719
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В своё время, меня на этом форуме отучили заниматься обновлением таблиц через recorset, теперь сам советую пользуй объеты ADO, хоть Connection, хоть Command.
ВОТ!!!!!!
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926825
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исходим из того что отказаться от рекордсета не имею возможности ;)

ЗЫ А что плохово в обновлении через рекордсет ? По крайней мере очень лаконично и удобно :)
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926844
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспользуйся поиском, поймёшь.
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926846
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глюкало этопо определению. Вместо простого и ясного закодированного программистом INSERT и UPDATE, задача постороения соотв. SQL оператора и последующая синхронизация рекордсета и базы данных возлагается на OLEDB провайдера. Ещё можно посмотреть куда ветер дует :), т.е каким образом организовано обновление базы в модели ADO.NET
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926856
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МученникИсходим из того что отказаться от рекордсета не имею возможности ;)


А это как? ADODB.Connection недоступен?
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926887
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
один из вероятных источников ошибок при работе с jet через рекордсеты -
проблемы выделения памяти. другой проблемы синхронизации данных.


первой части касаются - битая память, проблемы с выделением доп. памяти
(нехватка, ошибки при свопе и т.д.)

нужна (стат) информация по ошибке - возникает на нескольких машинах или только на одной.

если на всех - хоть какие-нибудь характеристики размера рекордсета\тов
задействованных в момент ошибки.

Если это при массовом вводе - после скольких добавлений возникает ошибка.

вторая часть сама по себе делится на собственные источники возникновения.

общие советы.
1) попробуй ограничить размер maxBufferSize (dbMaxBufferSize)
например, через DAO.SetOption

для дальнейшего советования нужно бы код видеть.

с завязанными глазами - если добавления в цикле и цикл "длинный" - полезно
периодически принудительно сбрасывать буфер jet.

сильно толково универсального не знаю, найдешь ли...

смотреть надо
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926918
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отказаться от модели не моргу так как уйма коду написана через рекордсеты и я править его совершенно не хочу, тем более что это не совсем в моём попечении ;)

А разрулить ситуацию оч надо...

код в основном тупой

типа

for i=0 to 10
rs.addNew()
rs("...") = '"..."
rs.Update

Или аналогичные операции с перекачкой данных из одного рекордсета в другой
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926924
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А действительно в одной транзакции ВСЕ изменения делать нужно?
авторОтказаться от модели не моргу так как уйма коду написана через рекордсеты и я править его совершенно не хочу, тем более что это не совсем в моём попечении ;)

А разрулить ситуацию оч надо...

Значит переписать код придётся
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926937
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все-таки начни с maxbufferSize

открытому соединению скажи что-то типа

Cnn.Properties("Jet OLDEDB:Max Buffer Size").Value = 8196
(или меньше - до 512 включительно)

потом уже на этом соединении открывай рекордсеты.

CursorLocation для рекордсетов какой?
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926938
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати ещё - обычно проблемы возникают при параллельной работе двух пользователей ;)

ЗЫ Все рекордсеты синхронизирую - то есть пока один создаёт рекордсет по таблице другой пользователь туже таблицу открыть не может на зпапись - только для чтения ;)

ЗЫЫ Переписать весь код не вариант :)
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926941
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Server Side
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926951
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МученникКстати ещё - обычно проблемы возникают при параллельной работе двух пользователей ;)

ЗЫ Все рекордсеты синхронизирую - то есть пока один создаёт рекордсет по таблице другой пользователь туже таблицу открыть не может на зпапись - только для чтения ;)

ЗЫЫ Переписать весь код не вариант :)

Это почти 100% ошибки синхронизации/взаимных блокировок.

посмотри ссылки, указанные здесь
/topic/42244&pg=7&hl=counter#1190506
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926952
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как задать свойство соединения MaxBufferSize в ADO и что оно именно означает ?
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926958
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МученникА как задать свойство соединения MaxBufferSize в ADO и что оно именно означает ?

F1+ ссылки (частично повторяющиеся)

/topic/144755&hl=maxbuffersize#1174363
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926969
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо взаимные блокировки
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926982
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это нереально - вопросы блокировок разруливаются на уровне приложения - то есть в коде предполагается что СУБД не способна к многопотосной работе и полностью самостоятельно поддерживается синхронизация....

А как вообще Jet синхронизует работу ? :)
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926996
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХМ-ХМ. Уже начинает становиться смешно. Интересно, что ВЫ там наваяли.
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32926998
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То что МЫ наваяли то отлично работает, к сожалению подавляющий объём кода ваяли не МЫ, как вы изволили выразится.

ЗЫ Что смешного то ? Как работает синхронизация SQL Server'а вполне прозрачно, но вот что там шаманит Jet не понятно и как то не вызывает доверия...
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32927026
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТо что МЫ наваяли то отлично работает, к сожалению подавляющий объём кода ваяли не МЫ, как вы изволили выразится.


ДА, теперь совсем смешно, МЫ не МЫ икорова не моя.
Sorry for OFF!!
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32927353
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после некоторых ковыряний в носу возникла гипотеза, что подобная
ошибка может свидетельствовать об истечении неких внутренних таймаутов ожидания ... не ясно правда чего.

глянул в MSDN, что там пишут про 0x80040e21

получается, что это некий тип "общей ошибки", которая может возникать
в ответ на
- ошибку инициализации провайдера при попытке открыть соединение
- попытку открыть обновляемый рекордсет с "серверным курсором" на источнике, который не может этого обеспечить по своей природе или
попытку произвести неподдерживаемую рекордсетом операцию - типа update
- попытку установить значение querytimeout за рамками допустимых значений.

-при использовании [Microsoft][ODBC Microsoft Access 97 Driver] + АДО
такая ошибка может возникать при попытке присвоить значение NULL полю, которое not nullable.

-может свидетельствовать о конфликтах при batch-update-ах.
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32927497
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
код в основном тупой

типа

for i=0 to 10
rs.addNew()
rs("...") = '"..."
rs.Update

Или аналогичные операции с перекачкой данных из одного рекордсета в другой

Идеальный случай для применения INSERT . . . SELECT . . .
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32927531
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м.б. и это:

PRB: "Multiple-step OLE DB Operation Generated Errors" When Opening ADO Connection
PSS ID Number: 269495

CAUSE
The following are two possible causes of this error:
In the registry, under the key for an OLE DB provider's CLSID, there may be an entry named OLEDB_SERVICES. If the OLE DB provider being used to make the ADO connection doesn't have the OLEDB_SERVICES entry, and ADO tries to set up a property that is not supported by the provider, the error occurs. For more information on this registry entry, see the "Resolution" section.
If OLEDB_SERVICES entry exists but there is a problem in the ADO connection string, the error occurs.
If the OLEDB_SERVICES registry entry is not present, the call to set up a property is made directly to the provider. If the provider does not support the property, the SetProperties OLE DB call made by ADO will fail. This is a fatal failure if the property is required in order to make a connection. If the property was explicitly included in the connection string, it is most likely required.

If the property setting is optional, the failure is not fatal. This is the case when you connect without explicitly setting the property in the connection string. In this case, ADO sets the property to True but marks it as optional.
RESOLUTION
You can work around this problem in the following ways:
Do not use the "Persist Security Info" keyword in your ADO connection string.
Add the OLEDB_SERVICES registry entry as follows:IMPORTANT: This article contains information about modifying the registry. Before you modify the registry, make sure to back it up and make sure that you understand how to restore the registry if a problem occurs. For information about how to back up, restore, and edit the registry, click the following article number to view the article in the Microsoft Knowledge Base:
256986 Description of the Microsoft Windows Registry

Start Registry Editor (Regedit.exe).
In the registry under HKEY_CLASSES_ROOT\CLSID, find the CLSID of the OLE DB Provider. For example, the following registry key is for the Microsoft OLE DB Provider for SQL Server (SQLOLEDB):
HKEY_CLASSES_ROOT\CLSID\{0C7FF16C-38E3-11d0-97AB-00C04FC2AD98}

Click the CLSID, and then on the Edit menu, click Add Value and add the following registry value:
Value Name: OLEDB_SERVICES
Data Type: REG_DWORD
Value: 0xFFFFFFFF


NOTE: To find the CLSID for the provider you are using, search for the provider's ProgID (SQLOLEDB, for example) in the registry under HKEY_LOCAL_MACHINE\SOFTWARE\Classes\. Under the ProgID, there will be a key named CLSID.
If the above conditions are satisfied and you still receive the error, check your connection string for other possible errors.
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32927598
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще из большой кучи топиков, посвященных этой ошибке:

BUG: Error When You Use Client Cursor to Add Record to SQL Server Table That Has Default Value in Datetime Field
SYMPTOMS
If you use ADO to insert a new record through a client-side recordset into a SQL Server table that has a non-nullable datetime field with a default value, you receive the following error message if you do not supply a value for the datetime field:
Run-time error '-2147217887 (80040e21)': Multiple-step operation generated errors. Check each status value.
This error occurs whether you use the OLE DB Provider for SQL Server or the OLE DB Provider for ODBC Drivers. The error message may differ when you use Microsoft Data Access Components (MDAC) version 2.5 Service Pack 1 (SP1) or earlier. This error does not occur with a server-side cursor.
CAUSE
This error occurs in the Client Cursor Engine when it attempts to convert the value of type DBTYPE_DBTIMESTAMP to DBTYPE_VARIANT.
RESOLUTION
There are several ways to work around this problem:
Use a server-side cursor for the recordset.
Remove the default value that is specified for the field in the database.
Always specify a value for the field when you add a new record.
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32928454
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему я докапался о причины...

Итак модельная ситуация такая :

Имеются две таблицы А и Б.

Из потока 1 открывается одна таблица А на чтение (клиентский курсор), Б на запись (серверный курсор).
Из потока 2 открываеься таблица А на запись (клиентский курсор)

-далее поток 1 перемещается по таблице 1 через moveNext, добавляет записи к таблице Б через addNew
-а поток 2 изменяет таблицу А

Всё внутри транзакции и дейтсвия иногда происходят одновременно.

Ясно что ситуация не совсем корректная, но всё таки создаётся ощущение что при записи в таблицу с клиентским курсором до конца транзакции все изменения не должны быть видны потоку 1 и вроде бы всё вполне может работать, если конечно сам сервер не обнаруживает подобные ситуации и не выкидывает 2го пользователя с ошибкой.

Где можно почитать про работу блокировок в Jet ?

PS Вообзще SQLAServer честно усыпляет поток до снятия блокировки или выкидывает ошибку при обнаружении Deadlock, что то я ни разу не видел что бы Jet кого либо подвешивал...
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32928605
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так обламывается добавление в Б 1м потоком
или апдейт А вторым?
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32928630
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новости !

Поток 1 в транзакции открывает таблицу А
Поток 2 в транзакции открывает таблицу Б

в цикле оба одновременно делают
addNew
update

И в конце концов тот поток который стартовал вторым падает !!!

Если поотдельности то всё нормально работает. То есть падает только когда перемешивается addnew/update из двух потоков. Connection у обоих разный

Что енто за глюк ? Или провайдер для аксесса не поддерживает полноценный мультитрединг ?!
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32928642
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или блокировки возникают в JET при одновременном добавлении в разные таблицы
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32928682
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey ShИли блокировки возникают в JET при одновременном добавлении в разные таблицы

Таблицы разные - блокируй на здоровье или он что, всю базу нафик блокирует ? Тогда это полный бред... Причём падает не сразу а где то после добавления 40-100 записей, сразу не удалось руками получить...
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32928738
н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
н
Гость
там в ссылках, что тебе давали - написано - то ли 63 то ли 67 записей
на блок кэша.
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32928788
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нтам в ссылках, что тебе давали - написано - то ли 63 то ли 67 записей
на блок кэша.

Можно здесь поподробнее ? ;)
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32928876
последняя ссылка в этом посте. - карта памяти для модифицированных строк.

/topic/144755&hl=maxbuffersize#1174363

блоками на 64 записи для вин98 - ми

по всему судя, ошибка стабильна на всех машинах?.


может быть это где-то вокруг разнотипности курсовров вовлеченных в танзакцию на одном соединении.

либо откажись от транзакции, либо перейди на execute
очень может быть, что поможет отключение рекордсета с клиентским курсором от соединения.

очень даже сервис пак на джет может быть полезен, а может и нет.

конфликт похож на локальный - типа рекордсет с серверным курсором не может дождаться от джет увеличения буферов для добавления записей и проваливается.
кто-то кому-то мешает.

Я примерно чего-то такого и предполагал, когда советовал maxBufferSize
ограничить.

Только я думал, что просто случайно что-то происходит в неопределенные моменты времени - типа функция времени работы приложения и общей загруженности компьютера - надо бы устаканить потребности по памяти,
а в качестве второго зайца - и вызов ситуации принудительного сброса буферов.

Похоже у вас все серьезнее...

попробуйте начать с отключения рекордсета с клиентским курсором от соединения (до начала транзакции). или с перехода на однотипные
рекордсеты.
Всех возможных проблем это не решит, но текущий конфликт, возможно изчезнет.
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32929003
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
удалось получить такое сообщение об ошибке:

Could not update; Currently locked

В процессе одновременного зацикленного AddNew, Update паралельно из разных потоков с разными таблицами !

Из особенностей разве что завожу индекс на таблице...
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32929133
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ж тебе ещё вчера сказал про блокировки.
Просил совета, получил. Получил и способ правильной организации работы, что ж ты всё, понять не можешь, переписывай клиента. Больше разговоров, чем дела. Уже давно б жизни радовался, а он всё код ошибки разбирает.
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32929196
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какие нафик блокировки когда треды работают с РАЗНЫМИ несвязанными таблицами ?!

Тогда уж это глюк провайдера/СУБД аксессовской вообще-то...
...
Рейтинг: 0 / 0
Ошибка во время многошаговой операции...
    #32929200
Мученник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ProgaЯ ж тебе ещё вчера сказал про блокировки.
Просил совета, получил. Получил и способ правильной организации работы, что ж ты всё, понять не можешь, переписывай клиента. Больше разговоров, чем дела. Уже давно б жизни радовался, а он всё код ошибки разбирает.

Вы ыообще когда нибудь с проектами на несколько метров исходного кода работали что бы советовать такое ?! У меня такое ощущение что нет...
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка во время многошаговой операции...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]