powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Блокировка записей в таблице
10 сообщений из 10, страница 1 из 1
Блокировка записей в таблице
    #32153508
_DmG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начинаю писать для MSSQL на Delphi . Использую ADO и хочу организовать блокировку одной записи для второго пользователя при редактировании этой-же записи первым.
Для Interbase + Delphi делал так:

1. Стартую транзакцию на запись.
2. Делаю UPDATE одной записи (напр. Date_R=Date_R)
3. Если ошибка (try..except), то вывожу сообщение о блокировке
записи другим пользователем, иначе показываю эту запись
пользователю в форме.

Для MSSQL происходит все прозрачно: любой пользователь может изменять запись в любой момент. Пробовал рулить курсорами - не помогло (всегда Static).

Если кто знает – помогите плиз…
...
Рейтинг: 0 / 0
Блокировка записей в таблице
    #32153547
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/topic/30341\r
\r
Сначала не мешало бы поскать ...
...
Рейтинг: 0 / 0
Блокировка записей в таблице
    #32156146
_DmG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ссылочку...

Попробовал реализовать следующее:
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: Еще вычитал про монопольные блокировки, но как их использовать не нашел…
...
Рейтинг: 0 / 0
Блокировка записей в таблице
    #32156209
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может поможет, точно не помню, посмотри в BOL типы блокировок и хинты.
По моему ROWLOCK есть. Судя по всему UPDLOCK блокирует не 1 строку.
Да еще уровни изоляции транзакций посмотри :))
...
Рейтинг: 0 / 0
Блокировка записей в таблице
    #32156231
_DmG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое BOL и где его смотреть...
...
Рейтинг: 0 / 0
Блокировка записей в таблице
    #32156239
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOL = Books On Line = Help.
...
Рейтинг: 0 / 0
Блокировка записей в таблице
    #32156240
_DmG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помогает ROWLOCK в случае попытки редактирования другой записи.

А вот с обновлением разобрался – делаю SELECT с хинтом NOLOCK.
...
Рейтинг: 0 / 0
Блокировка записей в таблице
    #32156245
_DmG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Туговат я что то на English...
...
Рейтинг: 0 / 0
Блокировка записей в таблице
    #32156467
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще тысячу раз говорилось, что не надо делать транзакции с клиента - это очень плохо
...
Рейтинг: 0 / 0
Блокировка записей в таблице
    #32156563
_DmG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо! \r
Проблема решена, смотри на\r
/topic/30941
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Блокировка записей в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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