|
|
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
для Pavel - мнится, здеся версионник не поможет. Тут глыбь конкретная, версионник в ней не пловец сам по себе. версионнику как и всем остальным рулильщик нужен. тута конкретна на наложение транзакций похоже. а код не показывают. вот сижу и думаю - кому стыднее должно быть - тому кто спрашивает, или тому, кто отвечает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 16:22 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
... или в самой постановке задачи допущены серьезные ошибки. Тут не только код, тут весь анамнез нужен с момента заражения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 16:26 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Ребят, контрола там нет. Я специально, дабы разобрать что к чему, сделал новый проект с одной лишь кнопкой, в которую запихнул весь код что обсуждается здесь, т.е. код касаемый непосредственно транзакции и добавления через рекордсет. Так что скрывать мне от вас нечего, код содержит не более того что мы обсуждаем здесь. Да и базу для экспериментов я новую создал, пустую. И завел там всего оку таблицу. Могу выслать, можете саби в дебагере посмотреть. А я лично склоняюсь к выводу что Access не умеет ограничивать блокировки одной записью в транзакциях. Давайте проверьте, создайте пустую базу, заведите там таблицу с одним полем, набейте десяток записей. И создайте VB проект с формой и кнопкой на ней и поиграйте с кодом и со всем что мне здесь советовали. Код, вешаемый на кнопку: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 16:36 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Жопа какая-то. Присоединяюсь к Павлу по поводу всего анамнеза (а мне ответили по поводу индексов?) А елси через Batch? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 16:49 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
А если SELECT вынеси из транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 16:55 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Через Batch блокировок нет, но и записи не добавляются, после завершения транзакции в таблице сколько было записей, столько и осталось. Не понял насчет анамнеза, звучит ругательно как-то, я же говорю что выложил весь неработающий код, зачем все модули выкладывать? Или это о другом? ЗЫ: достал я вас, примите извинения, но горю!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 16:57 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
авторИли это о другом? Так точно. Опиши бизнесс-процесс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:00 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Через Batch блокировок нет, но и записи не добавляются, после завершения транзакции в таблице сколько было записей, столько и осталось. Что значит не добавляются? А если ручками вставлять - что будет? Ошибки какие-нибудь есть? Да тебе уже писали про INSERT - это лучше чем через рекодсеты - но мне до конца разобраться хотца. И в конце концов ответь: ИНДЕКСЫ ЕСТЬ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:02 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
adUseServer пробовал cnnAccess.Mode = 16 пробовал Jet OLEDB:Database Locking Mode=0 тоже Jet OLEDB:Database Locking Mode=1 тоже rst.CacheSize = 1 пробовал Select и открытие рекордсета выносил за транзакцию adLockBatchOptimistic и UpdateBatch туда же Чего бы еще замутить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:02 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
В тестовой базе индексов нет, щас добавлю и глянем что будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:03 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
авторSelect и открытие рекордсета выносил за транзакцию вот это неправда - не было такого щас попробую "твой код" - жди 5 мин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:04 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Добавил ключевое поле, не помогло. Insert не устраивает потому что (об этом я умолчал, но без этого никак) нужно получить ID добавленной записи сразу после добавления! При Insert такого не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:06 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
авторвот это неправда - не было такого Здесь может я и не говорил, но по совету выше я это уже пробовал, ничего не вышло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:07 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
А задача простая, импорт информации из внешнего источника в базу. Есть клиенты, заказы. Алгоритм следующий: добавляем обсуждаемым здесь методом клиента в таблицу клиентов, получаем его ID_Client, добавляем товар в товары, получаем его ID_Product, добавляем заказ клиента в таблицу заказов с учетом ID_Client и ID_Product. Вот собственно и все. Но грабли в то что одновременно с импортом, который длится минут 5, операторы набивают вручную заказы и клиентов и соответственно вылазят глюки что запись заблокирована. Если делать добавления через Insert, то придется вообще блокировать работу отдела, чтобы после Insert через Selectc Max(ID) получить ID товаров и клиентов, если не блокировать, то MAX может оказаться другим (кто-то ввел запись, а я еще не успел свой MAX отселектить). Потому и решил использовать AddNew вместо Insert, думая что добавляемые записи уж никак на работе не скажутся. Но кто же думал что Access будет и тут блокировать страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:16 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
пробую на Борее через батч - все работает - все появляется Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Пробую по старому через Update - все работает - все добавляется - ничего не блокируется - со всем Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:17 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
авторInsert не устраивает потому что (об этом я умолчал, но без этого никак) нужно получить ID добавленной записи сразу после добавления! При Insert такого не могу. @@Identity ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:18 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Павел, какой @@Identity??? Это Access база! Виктор, а ты когда после Update стопорнул, т.е. когда транзакция все еще не завершена, открой таблицу и поменяй вручную значения ВСЕХ(!) записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:21 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Да, батч работает, стормознул немного, в смысле запись добавляется, но сабж по прежнему в силе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:22 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
авторПавел, какой @@Identity??? Это Access база! Я понимаю. А ты попробуй (если у тебя Аcsess 2000 или более поздний). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:23 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
всЕ работает - с индексами и без, со скобками и без, внутри и снаружи и батч и не батч - никаких блокировок. Единственное - если попутать параметры - типа открыть для батчапдейт а апдейтить .Update - просто молча не добавляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:25 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
всЕ работает - с индексами и без, со скобками и без, внутри и снаружи и батч и не батч - никаких блокировок. Единственное - если попутать параметры - типа открыть для батчапдейт а апдейтить .Update - просто молча не добавляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:27 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Виктор, а ты когда после Update стопорнул, т.е. когда транзакция все еще не завершена, открой таблицу и поменяй вручную значения ВСЕХ(!) записей. Действительно. Если остановить прогу ПОСЛЕ Update. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:32 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Дык не только Клиенты - все таблицы заблокированы Это из-за конекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:35 |
|
||
|
ADO Recordset блокирует всю таблицу, нужно блокировать только редактируемую запись.
|
|||
|---|---|---|---|
|
#18+
Pavel, 1) если mdb версии >=2000, то @@Identity у него ЕСТЬ 2) Еще раз - приведенный код ничего не блокирует, и , в принципе, честный, хотя свои "советы" оставляю в силе. Проблема НЕ в том коде непосредственно. Что-то утаивается. Выглядит объяснение твоего рассказа следующим образом: Есть два процесса А) и Б) а) открыл транзакцию а) добавил запись б) увидел добавленную запись б) открыл транзакцию (не обязательно) б) встал на редактирование записи и наложил блокировку а) закрыл транзакцию б) висит на записи до закрытия приложения, блокируя ее ПОЭТОМУ я говорил - ищи контрол. если это не контрол - то может, - "брошенный" незакрытый рекордсет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 17:35 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32455431&tid=1675750]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
169ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 480ms |

| 0 / 0 |
