powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка во время многошаговой операции...
13 сообщений из 38, страница 2 из 2
Ошибка во время многошаговой операции...
    #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
13 сообщений из 38, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка во время многошаговой операции...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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