powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Реализация одной идеи: блокировка записей в SQL Server
8 сообщений из 8, страница 1 из 1
Реализация одной идеи: блокировка записей в SQL Server
    #34277839
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой пост я уже заводил в ветке SQL Server, но плохо понимаю советы, за неимением опыта по работе с сервером, может здесь подскажете: собственно сам пост в ветке SQL Server
Реализация одной идеи
повторяюсь
orunbek
Привет всем.
Вобщем есть одна задачка или проблемка не знаю как назвать.
База на SQL Server\'е. Клиенты на VB.
Есть несколько связанных таблиц. Так вот, есть одна таблица, скажем "Документы".
Хочу реализовать такую вещь.
Пользователь User1 открыл определенную запись в данной таблице. При попытке открыть эту запись другим пользователем нужно чтобы выходило что она открыта пользователем User1, пока тот не закроет или не зависнет.
Есть идея, добавить в таблицу два поля: текущий статус (открыт другим пользователем или свободен), пользователь (т.е. кто в данный момент открыл эту запись, при статусе "открыт"). Когда пользователь закрывает эту запись статус переключается в режим "свободен". Но если завис пользователь, который открыл определенные записи, как переключить все открытые им записи в свободный режим? вариант проверять каждые N-секунд или минут не сойдет. Нету ли в SQL Server\'е какого-либо штатного средства, события или чего-то еще, которе возникнет при отключении клиента от сервера, чтобы закрыть все открытые им записи. или есть ли свои технологии SQL Server\'а для реализации такой идеи?
Заранее благодарю всех откликнувшихся!!


orunbek
Спасибо всем.
Целый день с маршрутизатором разбирался, времени не было ответы прочитать.
Спасибо всем еще раз.
Только вот не совсем понятно, просто я новичок в SQL Server\'е.
Насчет того, какой из предложенных методов лучший не могу сказать, из-за отсутствия опыта при работе с сервером.
Пока разберусь с одним методом, sp_getapplock
Пожалуйста, если не составит труда, объясните в моем понимании, или подскажите, пожалуйста еще раз
Клиентская часть подключатся одной учетной записью, а все данные пользователей которым заходят юзеры, находятся в отдельной таблице учетных записей, что-то наподобие
Код: plaintext
TblUsers:\n*ID        UserName           UserPassword\n 1            Ivanov                1 \n 2            Petrov                2 \n...\n
И прога сама уже по ним определяет пользователей и т.д.
И есть таблица документов
Код: plaintext
TblDocuments\n*ID        DocumentNum      DocumentName          DocumentDate\n 1             139                     Prihod                       13 . 01 . 2007 \n 2             140                     Rashod                      15 . 01 . 2007 \n...\n
И т.д., скажем юзер Ivanov открыл запись с ID=1 из таблицы TblDocuments, как я должен заблокировать эту запись? Из хэлпа достал следующее, но это я очень плохо понимаю
Код: plaintext
sp_getapplock [ @Resource = ] \'resource_name\', \n    [ @LockMode = ] \'lock_mode\' \n    [ , [ @LockOwner = ] \'lock_owner\' ] \n    [ , [ @LockTimeout = ] \'value\' ]\n
И потом, как узнать из программы, когда пользователь Petrov попытается открыть запись, уже открытую пользователем Ivanov, что она уже открыта, и открыта именно пользователем Ivanov (напоминаю, у меня клиентская часть подключается одним пользователем (скажем sa или что-то вроде этого). И потом как перехватить событие отключения клиента от сервера (при зависании, при сбое сети и т.д.), чтобы от сервера автоматически изменить блокировку, т.е., как я понимаю, sp_releaseapplock? Или при разрыве связи
[quote alexeyvg]Коннект разорвался? Всё само разблокируется.[/quote]
Просто с самим SQL Server\'ом я мало работал. Помогите пожалуйста.
...
Рейтинг: 0 / 0
Реализация одной идеи: блокировка записей в SQL Server
    #34278118
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы, наверное, воспользовался уже предложенным вам методом.
По поводу события отключения. У вас SQL 2000 или 2005? Если 2005, то там есть замечательное событие Audit_Logout, на которое можно повесить триггер (в SP2 CTP), либо через такую фишку:
Код: plaintext
CREATE Event Notification Logout ON SERVER FOR Audit_Logout

В 2000-й версии это тоже отлавливается, вроде было где-то в FAQ.
А вообще не очень понятно, чего конктретно вы от нас хотите.
...
Рейтинг: 0 / 0
Реализация одной идеи: блокировка записей в SQL Server
    #34278247
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня интересует как это реализуется на VB?
Образец кода,
1. Пользователь №1, открыл запись №139. Проверяется блокировка если нет открывается запись и ставится блокировка (с информацией о том, что данную запись открыл пользователь №1).
2. Пользователь №2 открывает запись №139. Проверяется блокировка, если скажем эту запись уже открыл пользователь №1, выводится соответствующая запись.

реализовать такую схему обычным путем, скажем путем добавления дополнительных полей в таблицы, где будет хранится информация о текущем статусе записи (открыт или нет, если открыт то кем). и изменении этих полей при открытии или закрытии, не сложно.
меня волнует именно момент перехвата событий когда клиентская часть отключается некорректно, при сбое сети, питания. при этом же нужно, изменить статусы открытых записей. как это реализовать, мне подсказали методы sp_getapplock, sp_releaselock и т.д. Вот интересуюсь как их использовать в VB? Пример реально работающего кода
...
Рейтинг: 0 / 0
Реализация одной идеи: блокировка записей в SQL Server
    #34278779
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще повесить джоб на скуле, чтобы он отмершие блокировки по дате (скажем 5 минут без ответа) откидывал?
...
Рейтинг: 0 / 0
Реализация одной идеи: блокировка записей в SQL Server
    #34279202
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbekМеня интересует как это реализуется на VB?
На VB здесь вообще ничего реализовывать не надо, только отлавливать ошибки, приходящие с сиквела. При условии, что работа с БД у вас организована через хранимые порцедуры.
orunbekреализовать такую схему обычным путем не сложно.
Ну так и реализуйте. Зачем вам пользоваться процедурами, смысл и принципы работы которых вы пока еще не понимаете?
Но если очень хочется - почитайте BOL про sp_getapplock - там все внятно написано - и вам станет понятно, что VB здесь опять-таки никак не участвует, все делется средствами сиквела.
В случае, если вы решите добавлять поля - вам поможет "тригеер на дисконнект", по срабатыванию которого вы будете вручную убирать блокировки.
Вариант с джобом тоже прокатит, хотя и некрасивый он.
...
Рейтинг: 0 / 0
Реализация одной идеи: блокировка записей в SQL Server
    #34280539
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkiadesВ случае, если вы решите добавлять поля - вам поможет "тригеер на дисконнект", по срабатыванию которого вы будете вручную убирать блокировки.
Возможна ли реализация такого варианта на MSDE 2000?
...
Рейтинг: 0 / 0
Реализация одной идеи: блокировка записей в SQL Server
    #34284108
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbek MelkiadesВ случае, если вы решите добавлять поля - вам поможет "тригеер на дисконнект", по срабатыванию которого вы будете вручную убирать блокировки.
Возможна ли реализация такого варианта на MSDE 2000?
Может быть, найдите вышеупомянутый FAQ и посмотрите. Я не работаю с MSDE и не могу сказать наверняка.
...
Рейтинг: 0 / 0
Реализация одной идеи: блокировка записей в SQL Server
    #34284368
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, покопаюсь, если что-нибудь удастся сделать
выложу на всеобщее обозрение
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Реализация одной идеи: блокировка записей в SQL Server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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