Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Блокировки в MS SQL [D7, MSSQL]


@dim ©   (2007-05-31 06:51:00) 

Начал изучать MS SQL, возникло несколько вопросов
1) Как средствами MS SQL заблокировать запись, если один из пользователей начал ее для редактировать (Имеется StringGrid, двойной щелчок вызывает форму редактирования записи в БД. Если один из пользователей начал редактирование, то для другово запись должна быть заблокирована)
2) Что делает этот код:
Create procedure _1sp__1SBKTTL_TLock AS
set nocount on declare @i integer select @i=1 from _1SBKTTL(TABLOCK HOLDLOCK) where 0=1
GO

Заранее спасибо


clickmaker   (2007-05-31 14:40:00) [1]


> Встроенные как то получше вроде. Во всяком случае блокировка
> сама снимется в случае проблем

это не блокировка в смысле блокирования записи/страницы/таблицы. Это статус именно объекта. По такому принципу работает, например, Source Safe


Jan1   (2007-05-31 14:33:00) [2]


> в ситуации когда один отредактировал, а другой сделал то
> же самое через минуту после первого, никакая блокировка
> не спасёт, а первый и не узнает, что данные уже не те, что
> он минуту назад корректировал

можно ввести понятие версии записи(которая считается триггером), и перед открытием делать запросик на актуальность версии в буфере и в базе и соответственно предпринимать шаги: ругаться, выдавать сообщение что запись надо перечиать и т.п. В общем это суть регламента...


ANB   (2007-05-31 14:18:00) [3]


> Но это все на уровне предметной области, а не встроенными
> средствами СУБД.

Встроенные как то получше вроде. Во всяком случае блокировка сама снимется в случае проблем. ИМХО.


clickmaker   (2007-05-31 13:02:00) [4]


> @dim   (31.05.07 06:51)

если речь идет о совместном редактировании неких документов, то по принципу check-out - взял, документ (не запись!!) помечается как занятый с помощью поля в таблице, поредактировал, сохранил - check in- отдал.
Но это все на уровне предметной области, а не встроенными средствами СУБД.
А для отдельных записей и правда смысла нет, ибо см. [1]
в ситуации когда один отредактировал, а другой сделал то же самое через минуту после первого, никакая блокировка не спасёт, а первый и не узнает, что данные уже не те, что он минуту назад корректировал


sniknik   (2007-05-31 10:42:00) [5]

> Имеется StringGrid
при работе с данными базы это означает "сделал жутко кривой велосипед с квадратными колесами"...
все остальное воспринимается как "помогите сделать колеса шестиугольными чтобы ход помягче стал"...

начал бы не с блокировок (mssql сам разберется с ними в большинстве случаев), начал бы с основ работы с базами. а там глядишь блокировать ничего надобности и не возникнет, при правильном подходе.


ANB   (2007-05-31 10:20:00) [6]


> Стоит 1-м в меню Программы> MS SQL Server :)

Из QA его еще проще вызвать. Плюс там шаблончики есть - удобно.
ЗЫ. Добавили бы в QA еще форматалку запросов и вообще было бы счастье.


ЮЮ   (2007-05-31 09:40:00) [7]

Help его. Books Online называется. Стоит 1-м в меню Программы> MS SQL Server :)


@dim   (2007-05-31 09:17:00) [8]

Что такое BOL?


ЮЮ   (2007-05-31 09:08:00) [9]

> если один из пользователей начал ее для редактировать

1)У двух пользователей не должно возникать желания редактировать одну запись (как запись таблицы БД). А если это возможно, то какая разница заблокирована она или нет. Ибо в ситуации когда один отредактировал, а другой сделал то же самое через минуту после первого, никакая блокировка не спасёт, а первый и не узнает, что данные уже не те, что он минуту назад корректировал.
Тебе не кажется странным, что два пользователя хотят видеть разнве двнные в одной и тойже записи? И кто в такой ситуации прав?

2) А в BOL заглянуть? Коль уж начал изучать MS SQL.

HOLDLOCK Hold a shared lock until completion of the transaction instead of releasing the lock as soon as the required table, row, or data page is no longer required.

Т.е. блокирует таблицу целиком до завершения транзакции


Наверх

Титульная страница Поиск, карта сайта Написать письмо