|
|
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
и еще из большой кучи топиков, посвященных этой ошибке: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 09:48 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
По моему я докапался о причины... Итак модельная ситуация такая : Имеются две таблицы А и Б. Из потока 1 открывается одна таблица А на чтение (клиентский курсор), Б на запись (серверный курсор). Из потока 2 открываеься таблица А на запись (клиентский курсор) -далее поток 1 перемещается по таблице 1 через moveNext, добавляет записи к таблице Б через addNew -а поток 2 изменяет таблицу А Всё внутри транзакции и дейтсвия иногда происходят одновременно. Ясно что ситуация не совсем корректная, но всё таки создаётся ощущение что при записи в таблицу с клиентским курсором до конца транзакции все изменения не должны быть видны потоку 1 и вроде бы всё вполне может работать, если конечно сам сервер не обнаруживает подобные ситуации и не выкидывает 2го пользователя с ошибкой. Где можно почитать про работу блокировок в Jet ? PS Вообзще SQLAServer честно усыпляет поток до снятия блокировки или выкидывает ошибку при обнаружении Deadlock, что то я ни разу не видел что бы Jet кого либо подвешивал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 14:03 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
так обламывается добавление в Б 1м потоком или апдейт А вторым? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 14:57 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
Новости ! Поток 1 в транзакции открывает таблицу А Поток 2 в транзакции открывает таблицу Б в цикле оба одновременно делают addNew update И в конце концов тот поток который стартовал вторым падает !!! Если поотдельности то всё нормально работает. То есть падает только когда перемешивается addnew/update из двух потоков. Connection у обоих разный Что енто за глюк ? Или провайдер для аксесса не поддерживает полноценный мультитрединг ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 15:07 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
Или блокировки возникают в JET при одновременном добавлении в разные таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 15:12 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
Alexey ShИли блокировки возникают в JET при одновременном добавлении в разные таблицы Таблицы разные - блокируй на здоровье или он что, всю базу нафик блокирует ? Тогда это полный бред... Причём падает не сразу а где то после добавления 40-100 записей, сразу не удалось руками получить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 15:33 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
там в ссылках, что тебе давали - написано - то ли 63 то ли 67 записей на блок кэша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 15:49 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
нтам в ссылках, что тебе давали - написано - то ли 63 то ли 67 записей на блок кэша. Можно здесь поподробнее ? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 16:08 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
последняя ссылка в этом посте. - карта памяти для модифицированных строк. /topic/144755&hl=maxbuffersize#1174363 блоками на 64 записи для вин98 - ми по всему судя, ошибка стабильна на всех машинах?. может быть это где-то вокруг разнотипности курсовров вовлеченных в танзакцию на одном соединении. либо откажись от транзакции, либо перейди на execute очень может быть, что поможет отключение рекордсета с клиентским курсором от соединения. очень даже сервис пак на джет может быть полезен, а может и нет. конфликт похож на локальный - типа рекордсет с серверным курсором не может дождаться от джет увеличения буферов для добавления записей и проваливается. кто-то кому-то мешает. Я примерно чего-то такого и предполагал, когда советовал maxBufferSize ограничить. Только я думал, что просто случайно что-то происходит в неопределенные моменты времени - типа функция времени работы приложения и общей загруженности компьютера - надо бы устаканить потребности по памяти, а в качестве второго зайца - и вызов ситуации принудительного сброса буферов. Похоже у вас все серьезнее... попробуйте начать с отключения рекордсета с клиентским курсором от соединения (до начала транзакции). или с перехода на однотипные рекордсеты. Всех возможных проблем это не решит, но текущий конфликт, возможно изчезнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 16:38 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
удалось получить такое сообщение об ошибке: Could not update; Currently locked В процессе одновременного зацикленного AddNew, Update паралельно из разных потоков с разными таблицами ! Из особенностей разве что завожу индекс на таблице... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 17:24 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
Я ж тебе ещё вчера сказал про блокировки. Просил совета, получил. Получил и способ правильной организации работы, что ж ты всё, понять не можешь, переписывай клиента. Больше разговоров, чем дела. Уже давно б жизни радовался, а он всё код ошибки разбирает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 18:01 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
Какие нафик блокировки когда треды работают с РАЗНЫМИ несвязанными таблицами ?! Тогда уж это глюк провайдера/СУБД аксессовской вообще-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 18:39 |
|
||
|
Ошибка во время многошаговой операции...
|
|||
|---|---|---|---|
|
#18+
ProgaЯ ж тебе ещё вчера сказал про блокировки. Просил совета, получил. Получил и способ правильной организации работы, что ж ты всё, понять не можешь, переписывай клиента. Больше разговоров, чем дела. Уже давно б жизни радовался, а он всё код ошибки разбирает. Вы ыообще когда нибудь с проектами на несколько метров исходного кода работали что бы советовать такое ?! У меня такое ощущение что нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 18:41 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32929133&tid=1668438]: |
0ms |
get settings: |
4ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 343ms |

| 0 / 0 |
