Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Использую ADOConnection, ADOQuery: запрос: select id from Table1 with (readpast); курсор: серверный ADOQuery.Open; ADOQuery.First; Должна выбранная запись заблокироваться, но этого не происходит (проверяется запуском второй копии данной программы) Что не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2003, 21:41 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Неужели ни у кого не было подобных задач и проблем??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 01:14 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Ну ты хоть посмотри, в какой форум пишешь. Тут Oracle обсуждают, батенька :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 02:55 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Упс, сам проперся, не в том окне, ответил :-)) Сорри :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 02:57 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Select не блокирует запись для других select-ов, т.е. поведение совершенно правильное. Если хочется заблокировать какую-то запись, напиши: select id from Table1 with (updlock, holdlock) where ...; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 07:22 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
2andsm : Хм... здрасти приехали: я и не говорю о том, что сам селект блокирует! Блокироваться должна только конкретная запись при выборе её с помощью средств компонент Delphi (ADO, к примеру) из полученного рекордсета при использовании (разумеется) серверного курсора! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 10:45 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Видать сложная проблема - никто реально помочь не может :((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 11:41 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Видать сложная проблема - никто реально помочь не может :((( Так сам себе придумал проблему, вот она и сложная. Зачем тебе серверный курсор. Зачем запись блокировать при выборке. Уходи от пессимистических блокировок на оптимистические. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 11:47 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
2pkarklin : Так сам себе придумал проблему, вот она и сложная. Это не я себе её придумал, а стоящие передо мною задачи! Зачем тебе серверный курсор. Зачем запись блокировать при выборке. Уходи от пессимистических блокировок на оптимистические. Представь, есть база e-mail (к примеру), или ещё какая-нибудь база-очередь, нужно отправить все сообщения, находящиеся в ней, выбранные по одному и тому же запросу. Но есть одно но: иногда требуется (для ускорения процесса) запустить много копий одно и той же программы, кот. рассылает эту очередь. Так вот чтобы не получилось повторных отправок из базы, требуется блокировать ТОЛЬКО требуемую запись от чтения и изменения для других транзакций!!! Меня интересует реально работающие примеры кода для такого рода задач! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 14:21 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Представь, есть база e-mail (к примеру), или ещё какая-нибудь база-очередь, нужно отправить все сообщения, находящиеся в ней, выбранные по одному и тому же запросу. Но есть одно но: иногда требуется (для ускорения процесса) запустить много копий одно и той же программы, кот. рассылает эту очередь. А что, стандартных почтовых серверов не хватет? И почему с клиента отправляешь, а не с сервера. Должна выбранная запись заблокироваться, но этого не происходит Это кто тебе сказал. Как твой SELECT отработал, так блокировки и снялись. Что б они остались висеть, надо транзакцию запускать. И курсор можно сделать локальным. Вот тока на клиенте это все делать как-то не правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 14:58 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Нда. Это надо в процедуре открывать транзакцию, считывать сколько нужно строк, потом на них проставлять флажок о том, что ты их взял на отправку, потом закрывать транзакцию и отдавать селект этих записей - когда отправил, ставить, что отправлено Другой клиент должен считывать записи без такого флажка - проблем то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 15:19 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
А что, стандартных почтовых серверов не хватет? И почему с клиента отправляешь, а не с сервера. Я же сказал - к примеру!!! На самом деле - отправляются не e-mail'ы, а происходят некоторые другие процессы, но ведь это не суть важно! Это кто тебе сказал. Как твой SELECT отработал, так блокировки и снялись. Ещё раз повторяю: я не говорил, что после того, как select отработал блокировки должны остаться сами по себе!!! Это я отлично понимаю, потому и говорил про транзакции! Что б они остались висеть, надо транзакцию запускать. И курсор можно сделать локальным. Вот тока на клиенте это все делать как-то не правильно. Так вот и нужен мне серверный курсор, чтобы блокировка выбранной записи (row) была для всех, а не для локальной копии рекордсета (при клиентском курсоре)! Я создаю новую транзакцию, делаю простой запрос select id from Table1 with (readpast), выбираю первую запись, получаю id, запускаю другую копию, делаю тоже самое, и получаю тот же самый id!!! Вот в чём проблема! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 15:55 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Так вот и нужен мне серверный курсор, чтобы блокировка выбранной записи (row) была для всех, а не для локальной копии рекордсета (при клиентском курсоре)! Да почему ж серверный то. Хоть вообще не будь никакого курсора. 1. Begin Tran 2. SELECT... c хинтом HOLDLOCK, ROWLOCK 3. Чего то делаем 4. Сommit tran ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2003, 16:01 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Кладу на форму нового проекта Код: plaintext 1. 2. 3. 4. 5. Заполняю методы OnClick для двух кнопок: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Никаких других параметров не изменял, кроме как создал ConnectionString до соотв. БД + username + password + default initial catalog... LoginPrompt поменял на False. Делаю Build.... Запускаю 2 копии этого проекта (Project1.exe), жму Button1 на одном, выводит в Label1 цифру 1. Жму Button1 на другом, выводит в Label1 также цифру 1. Вывод: НЕ РАБОТАЕТ твой пример!!! Во второй копии проекта должен был вывести PollID=2 (а не один) Что я не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 16:29 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
Да мой то пример был продолжением поста tygra. В которой он предлагал проставить флажки. И потом работать тока с записями, флажки для которой проставлены. Select не заблокирует запись от другого селекта, пока ты в этой же транзакции UPDATE не сделаешь. Вот тогда другой select с хинтом readpast пропустит те записи, которые были изменены, но транзакция еще не зафиксирована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 18:31 |
|
||
|
Блокировка записи DELPHI 6 + ADO + MS SQL 2000
|
|||
|---|---|---|---|
|
#18+
работает, если делать после select'а update той записи в этой же транзакции, кот. хочу заюзать, но мне кажется, что это какой-то некорректный подход к проблеме... Буду думать... Если есть другие предложения - пишите сюда, в форум... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2003, 19:11 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32150263&tid=2118421]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
85ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 284ms |
| total: | 492ms |

| 0 / 0 |
