Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Блокировка записей в таблице
|
|||
|---|---|---|---|
|
#18+
Начинаю писать для MSSQL на Delphi . Использую ADO и хочу организовать блокировку одной записи для второго пользователя при редактировании этой-же записи первым. Для Interbase + Delphi делал так: 1. Стартую транзакцию на запись. 2. Делаю UPDATE одной записи (напр. Date_R=Date_R) 3. Если ошибка (try..except), то вывожу сообщение о блокировке записи другим пользователем, иначе показываю эту запись пользователю в форме. Для MSSQL происходит все прозрачно: любой пользователь может изменять запись в любой момент. Пробовал рулить курсорами - не помогло (всегда Static). Если кто знает – помогите плиз… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 15:26 |
|
||
|
Блокировка записей в таблице
|
|||
|---|---|---|---|
|
#18+
/topic/30341\r \r Сначала не мешало бы поскать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 16:01 |
|
||
|
Блокировка записей в таблице
|
|||
|---|---|---|---|
|
#18+
Спасибо за ссылочку... Попробовал реализовать следующее: 1. Старт транзакции 2. Организую блок try 3. Запускаю запрос SET LOCK_TIMEOUT 0 для ответа пользователю об ошибке чтения (запись блокирована) 4. Делаю UPDATE записи WHERE Kod =111 4.1. Если ошибка, то ADOConnection1.RollbackTrans 4.2. Если OK, то SELECT * ___ WITH (UPDLOCK) WHERE Kod=111 (блокируем запись…) 5. Делаем UPDATE 6. Делаем ADOConnection1.CommitTrans Все работает изумительно, для случая, когда второй клиент пытается изменить ту же запись – он получает сообщение о блокировке записи 111… Но, когда он пытается изменить другую, никем не занятую запись , то получает сообщение о блокировке записи 222. Второй клиент может менять запись 222 только после освобождения записи 111 первым клиентом. И еще одна проблемка… Когда первый клиент занял 111 запись, второй не может сделать SELECT всех записей до ее освобождения (хотя в книжках нашел, что UPDLOCK не мешает читать блокированные записи). Если использовать хинт READPAST, то второй пользователь не может получить все записи (напр. нужно сделать отчет списком). Может кто знает как лечить ??? PS: Еще вычитал про монопольные блокировки, но как их использовать не нашел… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 14:09 |
|
||
|
Блокировка записей в таблице
|
|||
|---|---|---|---|
|
#18+
Может поможет, точно не помню, посмотри в BOL типы блокировок и хинты. По моему ROWLOCK есть. Судя по всему UPDLOCK блокирует не 1 строку. Да еще уровни изоляции транзакций посмотри :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 14:45 |
|
||
|
Блокировка записей в таблице
|
|||
|---|---|---|---|
|
#18+
Что такое BOL и где его смотреть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:06 |
|
||
|
Блокировка записей в таблице
|
|||
|---|---|---|---|
|
#18+
BOL = Books On Line = Help. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:14 |
|
||
|
Блокировка записей в таблице
|
|||
|---|---|---|---|
|
#18+
Не помогает ROWLOCK в случае попытки редактирования другой записи. А вот с обновлением разобрался – делаю SELECT с хинтом NOLOCK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:14 |
|
||
|
Блокировка записей в таблице
|
|||
|---|---|---|---|
|
#18+
Туговат я что то на English... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:15 |
|
||
|
Блокировка записей в таблице
|
|||
|---|---|---|---|
|
#18+
И еще тысячу раз говорилось, что не надо делать транзакции с клиента - это очень плохо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 19:24 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=2045&tid=2118356]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 253ms |
| total: | 408ms |

| 0 / 0 |
