
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
24.01.2007, 11:26
|
|||
|---|---|---|---|
Реализация одной идеи: блокировка записей в SQL Server |
|||
|
#18+
Такой пост я уже заводил в ветке SQL Server, но плохо понимаю советы, за неимением опыта по работе с сервером, может здесь подскажете: собственно сам пост в ветке SQL Server Реализация одной идеи повторяюсь orunbek Привет всем. Вобщем есть одна задачка или проблемка не знаю как назвать. База на SQL Server\'е. Клиенты на VB. Есть несколько связанных таблиц. Так вот, есть одна таблица, скажем "Документы". Хочу реализовать такую вещь. Пользователь User1 открыл определенную запись в данной таблице. При попытке открыть эту запись другим пользователем нужно чтобы выходило что она открыта пользователем User1, пока тот не закроет или не зависнет. Есть идея, добавить в таблицу два поля: текущий статус (открыт другим пользователем или свободен), пользователь (т.е. кто в данный момент открыл эту запись, при статусе "открыт"). Когда пользователь закрывает эту запись статус переключается в режим "свободен". Но если завис пользователь, который открыл определенные записи, как переключить все открытые им записи в свободный режим? вариант проверять каждые N-секунд или минут не сойдет. Нету ли в SQL Server\'е какого-либо штатного средства, события или чего-то еще, которе возникнет при отключении клиента от сервера, чтобы закрыть все открытые им записи. или есть ли свои технологии SQL Server\'а для реализации такой идеи? Заранее благодарю всех откликнувшихся!! orunbek Спасибо всем. Целый день с маршрутизатором разбирался, времени не было ответы прочитать. Спасибо всем еще раз. Только вот не совсем понятно, просто я новичок в SQL Server\'е. Насчет того, какой из предложенных методов лучший не могу сказать, из-за отсутствия опыта при работе с сервером. Пока разберусь с одним методом, sp_getapplock Пожалуйста, если не составит труда, объясните в моем понимании, или подскажите, пожалуйста еще раз Клиентская часть подключатся одной учетной записью, а все данные пользователей которым заходят юзеры, находятся в отдельной таблице учетных записей, что-то наподобие Код: plaintext И есть таблица документов Код: plaintext Код: plaintext [quote alexeyvg]Коннект разорвался? Всё само разблокируется.[/quote] Просто с самим SQL Server\'ом я мало работал. Помогите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.01.2007, 12:12
|
|||
|---|---|---|---|
Реализация одной идеи: блокировка записей в SQL Server |
|||
|
#18+
Я бы, наверное, воспользовался уже предложенным вам методом. По поводу события отключения. У вас SQL 2000 или 2005? Если 2005, то там есть замечательное событие Audit_Logout, на которое можно повесить триггер (в SP2 CTP), либо через такую фишку: Код: plaintext В 2000-й версии это тоже отлавливается, вроде было где-то в FAQ. А вообще не очень понятно, чего конктретно вы от нас хотите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.01.2007, 12:35
|
|||
|---|---|---|---|
Реализация одной идеи: блокировка записей в SQL Server |
|||
|
#18+
Меня интересует как это реализуется на VB? Образец кода, 1. Пользователь №1, открыл запись №139. Проверяется блокировка если нет открывается запись и ставится блокировка (с информацией о том, что данную запись открыл пользователь №1). 2. Пользователь №2 открывает запись №139. Проверяется блокировка, если скажем эту запись уже открыл пользователь №1, выводится соответствующая запись. реализовать такую схему обычным путем, скажем путем добавления дополнительных полей в таблицы, где будет хранится информация о текущем статусе записи (открыт или нет, если открыт то кем). и изменении этих полей при открытии или закрытии, не сложно. меня волнует именно момент перехвата событий когда клиентская часть отключается некорректно, при сбое сети, питания. при этом же нужно, изменить статусы открытых записей. как это реализовать, мне подсказали методы sp_getapplock, sp_releaselock и т.д. Вот интересуюсь как их использовать в VB? Пример реально работающего кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.01.2007, 14:16
|
|||
|---|---|---|---|
Реализация одной идеи: блокировка записей в SQL Server |
|||
|
#18+
А не проще повесить джоб на скуле, чтобы он отмершие блокировки по дате (скажем 5 минут без ответа) откидывал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.01.2007, 15:41
|
|||
|---|---|---|---|
Реализация одной идеи: блокировка записей в SQL Server |
|||
|
#18+
orunbekМеня интересует как это реализуется на VB? На VB здесь вообще ничего реализовывать не надо, только отлавливать ошибки, приходящие с сиквела. При условии, что работа с БД у вас организована через хранимые порцедуры. orunbekреализовать такую схему обычным путем не сложно. Ну так и реализуйте. Зачем вам пользоваться процедурами, смысл и принципы работы которых вы пока еще не понимаете? Но если очень хочется - почитайте BOL про sp_getapplock - там все внятно написано - и вам станет понятно, что VB здесь опять-таки никак не участвует, все делется средствами сиквела. В случае, если вы решите добавлять поля - вам поможет "тригеер на дисконнект", по срабатыванию которого вы будете вручную убирать блокировки. Вариант с джобом тоже прокатит, хотя и некрасивый он. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.01.2007, 05:52
|
|||
|---|---|---|---|
Реализация одной идеи: блокировка записей в SQL Server |
|||
|
#18+
MelkiadesВ случае, если вы решите добавлять поля - вам поможет "тригеер на дисконнект", по срабатыванию которого вы будете вручную убирать блокировки. Возможна ли реализация такого варианта на MSDE 2000? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.01.2007, 09:53
|
|||
|---|---|---|---|
Реализация одной идеи: блокировка записей в SQL Server |
|||
|
#18+
orunbek MelkiadesВ случае, если вы решите добавлять поля - вам поможет "тригеер на дисконнект", по срабатыванию которого вы будете вручную убирать блокировки. Возможна ли реализация такого варианта на MSDE 2000? Может быть, найдите вышеупомянутый FAQ и посмотрите. Я не работаю с MSDE и не могу сказать наверняка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=60&mobile=1&tid=2164629]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
641ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 899ms |

| 0 / 0 |
