SevereK20
  Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору eddoc   Я не большой спец, но задавалася уже этим вопросом.   Пример 1-на клиентском приложении при закрытии программы делать инсерт в лог о том, что пользователь покинул бд. Понятное дело, что при обрывах сети, аварийном завершении работы и т.д. метод не сработает.    Собственно говоря когда я писал я опирался на это сообщение (с другого форума)    Цитата: 1. Добавил по одному полю (назвал его Locker) к каждому документу (т.е. к соотв. таблице).   2. Создал простенькую табличку LockDoc с одним полем DocNum. Его же сделал ПК.   Тут надо, правда, отметить, что нумерация (ПК) у всех типов документов у меня в базе сквозная, т.е. нет никаких (каких бы то ни было) документов с одним номером. Но, думаю, это преодолимо.   3. При начале редактирования первым делом пытаемся вставить в таблицу LockDoc номер редактируемого документа. Если такой номер там уже есть, (это значит, что его кто-то уже редактирует), то получим нарушение ограничения ПК. Обрабатываем это исключение на клиенте, сообщая ему, что юзер такой-то уже начал изменять документ (о имени юзера см. следующий пункт).   4. Если вставка номера в таблицу LockDoc прошла успешно, то:   4.1. Транзакцию на обновление LockDoc оставляем открытой до конца редактирования документа.   4.2. В поле редактируемого документа Locker вписываем USER и завершаем эту транзакцию (для того, чтобы это имя можно было потом прочитать).   Если конкурирующий юзер нарвется на невозможность начать редактирования документа, то формируется запрос к этому документу, откуда мы и получим имя юзера - "блокировщика".   5. После окончания редактирования документа откатываем транзакцию для таблицы Locker (т.е. убираем от-туда номер заблокированного документа. Для тех, кто видит в откате плохой тон, можно Commit - Delete - Commit).   В отредактированном документе имя юзера в поле LockDoc просто оставляем - оно никому не мешает.   |  
  |