Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
19.10.2001, 04:58
|
|||
|---|---|---|---|
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
Есть док-т. Необходимо организовать с ним монопольный режим работы, оставив возможность чтения для других. Куча народу могут обрабатывать табличную часть независимо от шапки. Хочется исключить изменения табличной части при открытии док-та. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.10.2001, 07:24
|
|||
|---|---|---|---|
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mssql&Post=2739&Idle=365&Sort=0&Order=Descend&Page=0 Тут по этому поводу разговор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.10.2001, 08:00
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
Предлагаю такую концепцию. Метка "взято на редактирование" состоит из двух полей: ID процесса и даты логина. Эта парочка значений уникальна во времени и в пространстве (в пределах сервера). Берущий на редактировании проставляет в записи метку, беря значения из sysprocesses (spid и login_time). При окончании редактирования метка обнуляется. При потере коннекта запись в sysprocesses c этой парой значений перестает существовать (это происходит достаточно быстро), поэтому это можно проверить. Условие "а есть ли метка" имеет положительное значение только при выполнении одновременно 2-х условий: (1) поля заполнены и (2) эти значения есть в sysprocesses. Все коннекты, желающие взять запись на редактирование, проверяют эти 2 условия. Если хоть одно из них ложно, то - метки нет, и запись можно взять на редактирование. Достоинства метода: 1) Легко управляемо. 2) Легко определяемо. Всегда можно узнать, кто взял на редактирование. 3) Отсутствует проблема оставщейся метки, если клиент, редактирующий запись, оторвался. 4) Отсутствие блокировок. Если надо избежать злоупотреблений типа кто-то взял на редактирование, и не закрывая приложение, ушел к любовнице, можно добавить еще одно поле, где проставлять время взятия на редактирование, и к двум условиям добавить и третье "прошло не больше ... часов". Кто дочитал до конца и не устал от моей манеры сумбурно описывать хаос моих мыслей - спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2001, 05:57
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
Я ничего не понял. Кто объяснит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.10.2001, 12:35
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
У меня примерно такое же решение: В базе tempDB есть таблица активных коннектов, и таблица "блокировок", куда ведется запись кто, когда и какую запись взял на редактирование. Каждая таблица в базе имеет свой ИД. В результате в таблицу блокировок записывается строка состоящая из SPID, ИД таблицы, ИД записи, даты и времени блокировки. Прежде чем взять что-то на редактирование, необходимо проверить содержимое данной таблицы и если данную запись кто-то уже заблокировать - отказать в доступе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2001, 06:09
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
2Глеб Уфимцев Добавлю, что при установлении нового соединения надо сразу снимать метки со своим spid. Т.к. после разрыва соединения одним пользователем, второй может установить соединеие с его, только что освобожденным значением spid. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2001, 06:33
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
2 Barbar Как раз для этого используется еще и поле login_time. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2001, 06:35
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
> Добавлю, что при установлении нового соединения надо сразу снимать метки со своим spid. Т.к. после разрыва соединения одним пользователем, второй может установить соединеие с его, только что освобожденным значением spid. Ну, и что? Пусть ради бога устанавливает свою метку, если ему надо. Это теперь его метка, а тот - предыдущий - уже оторвался, следовательно, метка его недействительно и запись свободна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2001, 06:38
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
Ты не понял - у нового пользователя с тем же spid, что и у предыдущего, будет другое значение login_time, а следовательно, никто не сочтет метку от старого пользователя за метку нового. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2001, 18:22
|
|||
|---|---|---|---|
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
Мне очень понравилась идея Глеба Уфимцева. Добавлю только, что она ориентирована на кратковременное взятие на редактирование. В некоторых случаях (когда документы требуют многодневной проработки) необходима возможность оставлять электронный документ заблокированным. Реализовать такой механизм гораздо проще и вариантов реализации множество. Додумать каждый может как ему нравится. Лично я предполагаю использовать совокупность двух методов, поскольку в нашей системе преполагается использование документов с широким диапазоном сроков проработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2001, 19:32
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
А можно еще и задачку организовать, которая бы раз в 5 - 10 минут чистила бы несуществующие метки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.11.2001, 07:49
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
Господа, в SQL Server есть возможность блокировать данные на уровне записей. Чтобы использовать данную фичу, скажем, при редактировании табличной части дока на экране клиентского компьютера (т.е. когда нужно: 1)заблокировать 2)дать юзеру возможность редактировать 3)разблокировать) нужно: 1) перед выборкой данных начать транзакцию с уровнем изоляции SERIALIZABLE или READCOMMITTED 2) сделать что-то типа SELECT .. from DOC_TABLEPART with (ROWLOCK HOLDLOCK) where DOC_ID = ... 3) на клиенте (если это АДО), использовать тип блокировки adLockPessimistic 4) выдать форму для редактирования 5) по закрытии формы - сделать COMMIT TRANSACTION А для того, чтобы клиенты могли тем не менее читать заблокированные строки, необходимо в запросах на чтение указывать хинт with (NOLOCK) или with (READUNCOMMITTED): select .. from DOC_TABLEPART with (READUNCOMMITTED) where DOC_ID = ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.11.2001, 07:54
|
|||
|---|---|---|---|
|
|||
Как организовать работу с табличной частью док-та, блокировки и все такое? |
|||
|
#18+
Кстати, полезна вещица "SET LOCK_TIMEOUT 0", перед началом транзакции или выполнением запроса говорит серверу, что надо сразу выдавать @@ERROR != 0 и прекращать выполнение стейтмента, если имеет место попытка выбрать/обновить заблокированные данные. Короче, читайте MSDN или SQLBOL на тему о блокировках... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&tablet=1&tid=1825111]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 341ms |

| 0 / 0 |
