|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
Коллеги, помогите идеей! Имеется некая таблица на MSSQLSERVER. От нескольких десятков до нескольких сотен, возможно, нескольких тысяч записей. Несколько (в пределе несколько десятков) пользователей, одновременно редактируют эту таблицу. Редактируют по одной записи. Таблица в пользовательском приложении представлена в виде сетки. Наверное datagridview, но торг - уместен. Необходимо реализовать следующее поведение: 1. Все пользователи, которые редактируют данные, должны получать информацию, что указанная запись уже кем то редактируется (ну, карандашик что-ли в фиксированном заголовочном столбце). 2. Однако это не должно блокировать доступ к этой записи других пользователей. 3. Отредактированные записи должны синхронно обновляться у всех пользователей, редактирующих таблицу. 4. В случае, если в этот момент какой то другой пользователь редактирует эту запись, он должен получить сообщение, что запись была изменена. Подскажите, как это реализовать? Концептуально что-ли... Хранить информацию о том, что пользователь собирается редактировать запись в какой то таблице? А как получать информацию о том, что пользователь успешно обновил запись? А как собирать мусор, если пользователь захватил запись, но потом ошибочно завершился, не успев вычеркнуть информацию о блокировке? Помогите не изобретать велосипед! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2014, 20:03 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
смотрите в сторону Windows Communication Foundation ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2014, 20:22 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
Указанная задача без велосипедов не решается. Пункт 3 адекватно делается при схождении парада планет. В простейшем случае в таблицу нужно добавить поля: ItemEdit bit --запись редактируется в данный момент StartEdit datetime --когда запись начали редактировать LastItemUpdate datetime --когда запись была последний раз обновлена ItemInsert datetime --когда запись добавили На основе данных в этих полях можно реализовать описанное выше. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 08:22 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
Если уже "жесткую блокировку" записи на конкретного юзера нужно сделать, то еще и поле с ID юзера нужно добавить, который редактирует запись. Ваще реализация подобных вещей это ужасный гемор, здесь логики может быть больше в 10 раз чем логики в самом приложении, проще надо быть ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 08:27 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
Пока делать нефиг, дополню... В датагриде есть события на начало и конец редактирования записи. Можно по этим событиям устанавливать на сервере ItemEdit в true/false, но если полей много, то дохрена запросов на сервак будет лететь, лучше тогда сделать отдельную формочку для редактирования записи - details, и при ее открытии/закрытии устанавливать ItemEdit в true/false, так система будет работать "жеще". ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 11:19 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
EDUARD SAPOTSKIлучше тогда сделать отдельную формочку для редактирования записи+0х18894 Я блокировки редактирования записей вообще складываю в отдельную таблицу с привязкой к пользователю и экземпляру клиентского приложения. Тогда во-первых не нужно привязываться к записи (одна блокировка может запретить несколько действий, а не одно), во-вторых при аварийной потере клиента, его блокировки спокойно очищаются сервером. Формочка по умолчанию открывается в режиме ReadOnly, блокировка наступает, когда пользователь явно нажал "Редактировать" (впрочем, это опционально) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 11:38 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
Shocker.ProЯ блокировки редактирования записей вообще складываю в отдельную таблицу с привязкой к пользователю и экземпляру клиентского приложения. Тогда во-первых не нужно привязываться к записи (одна блокировка может запретить несколько действий, а не одно), во-вторых при аварийной потере клиента, его блокировки спокойно очищаются сервером. Можно конечно и так. Здесь задачка с виду и простая, но вариантов решения можно придумать уйму, а геморнее всего сообщать клиетам что такие-то записи редактируются и динамически все обновлять. Простейший вариант - дергать сервак по таймеру, но если клиентов сотня и дергать каждые 3 секунды это уже попа. Слать сообщение от сервака клиентам, тоже вариант геморный, далеко не всегда так сделать получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 12:06 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
Я делал подобное с помощью SignalR. Приложение WinForms, подключенное к SignalR серверу. Грид для отображения (read-only), отдельная форма для редактирования вызывается по double-click на записи или по нажатию кнопки. Если кто-то блокирует запись на редактирование, SignalR рассылает всем остальным подключенным пользователям сообщение о блокировке и для них эта запись становится недоступной для редактирования в пользовательском интерфейсе. Если кто-то заблокировал запись и потерял связь с сервером, это ловится через событые на сервере по тайм-ауту и все блокировки этого пользователя снимаются. также реализовано и обновление. после того, как пользователь закончил редактирование, и запись успешно обновлена, то всем рассылается обновленный объект, старая запись замещается новой и разблокируется для последующего редактирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 13:33 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
забыл добавить, что для манипулирования записями в таблице на сервере SignalR дергает соответствующие хранимые процедуры с параметрами. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 13:36 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
все это можно, если с Бд работают только твои клиенты а что быдет если то то минуя ваш доморощенный механизм будет работать с БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 15:26 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
ViPRosвсе это можно, если с Бд работают только твои клиенты а что быдет если то то минуя ваш доморощенный механизм будет работать с БД? В моем случае, общение программа <-> SQL Server идет через веб-сервер и SignalR, и напрямую к сиквелу у пользователей доступа нет. Логику сделал на хранимках, и права дал только на них, т.е. в любом случае пользователи не имеют прямого доступа к таблицам и ничего там не смогут поменять. Еще, в приложении сделал кнопочку Refresh, чтобы уж в крайнем случае можно было перечитать самые свежие данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 18:02 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
Диклевич Александр, дык это у ВТОЕЙ проги нет прав у пользователей, у других прог запросто может и быть ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 18:45 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
А у кого-то есть доступ к шнуру питания сервера и что дальше? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 18:48 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
А что мешает реализовать простой механизм "Извлечь запись", наподобие как в SharePoint сделано? Юзер жмет кнопку и если запись свободна, то извлекается и прибивается к пользователю. Теперь её никто не сможет редактировать (кроме администраторов). Задача настолько элементарна, что тут даже усложнять нечего. Два поля, дата/время и пользователь. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 19:09 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
МСУДва поля, дата/время и пользователь. Дата/время чего? Как известить потом юзеров что данная запись изменена? И как узнать что клиент не отвалился при редактировании? Даты должно быть по крайней мере две, когда началось редактирование и когда сохранили изменения, а еще всем юзерам нужно узнавать о добавлении новых записей, соответственно еще и дата всавки нужна... не так все просто... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 19:19 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
EDUARD SAPOTSKIДата/время чего? Дата и время извлечения. Другими словами, чтобы знать, когда юзер застолбил запись под себя. EDUARD SAPOTSKIКак известить потом юзеров что данная запись изменена? Это уже другая задача. Любишь же ты мешать в кучу мух с котлетами. Когда юзер опубликует запись, тогда пользователям (которые подписаны на уведомления) придет сообщение по почте. EDUARD SAPOTSKIИ как узнать что клиент не отвалился при редактировании? Никак. Этого и не надо знать. Когда будет публикация, тогда будет запись доступна. Не нужно ничего усложнять какими-то кривыми процессами. EDUARD SAPOTSKIДаты должно быть по крайней мере две, когда началось редактирование и когда сохранили изменения, а еще всем юзерам нужно узнавать о добавлении новых записей, соответственно еще и дата всавки нужна... не так все просто... Глупости. Не нужны ни две, ни три даты. Это никому не нужная информация. Нужно только знать, когда и кто застолбил запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 19:24 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
Shocker.ProА у кого-то есть доступ к шнуру питания сервера и что дальше? значит нефиг заниматься фигней либо ты как положено что то блокируешь ото всех, либо оптимизм ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 19:46 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
МСУНужно только знать, когда и кто застолбил запись. это тоже глупость, все это лишнее (ты все равно не сможешь повлиять на ход событий - или прав нет (инфа о юзерах закрыть от тебя), или тот более привлегирован чем ты, и т.д.) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 19:49 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
стратегий явных 3 пессимизм оптимизм смес (для разных юзеров, ролей, объектов их отношений -разные стратегии) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 19:53 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
ViPRosМСУНужно только знать, когда и кто застолбил запись. это тоже глупость, все это лишнее (ты все равно не сможешь повлиять на ход событий - или прав нет (инфа о юзерах закрыть от тебя), или тот более привлегирован чем ты, и т.д.) Какой ход событий, ты о чем? Пользователь Вася Пупкин застолбил запись, т.к. у него есть на это права. Остальные сосут болт до тех пор, пока запись не освободится. В чем проблема? Да и с какого перепуга информация о Васи Пупкине закрыта от меня? Мне вообще нравится ваша с Эдиком затея - вечно пытаетесь накрутить каких-то левых требований, пытаетесь додумать новых задач и просто фантазий. Не нужно никакой лапши. Кейс простой - управление одновременным редактированием данных несколькими пользователями. Точка. Вот тут есть немного аналитики. http://codearticles.ru/articles/1842 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 20:42 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
МСУЭто уже другая задача. Любишь же ты мешать в кучу мух с котлетами. Когда юзер опубликует запись, тогда пользователям (которые подписаны на уведомления) придет сообщение по почте. Куда плять? По какой почте? Сидит отдел и редактирует записи. Еще и в аутлук лазить узнавать кто что отредактировал? Это комплексная задача, и решать нужно все сразу и скопом! МСУНикак. Этого и не надо знать. Когда будет публикация, тогда будет запись доступна. Не нужно ничего усложнять какими-то кривыми процессами. Клиен хочет динамическое обновление! Ему ты не докажешь что сам дурак. Надо значит надо! МСУГлупости. Не нужны ни две, ни три даты. Это никому не нужная информация. Нужно только знать, когда и кто застолбил запись. Да. В большинстве случаев это прокатывает, но бывают и привередливые клиенты. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 21:25 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
EDUARD SAPOTSKIКуда плять? По какой почте? Сидит отдел и редактирует записи. Еще и в аутлук лазить узнавать кто что отредактировал? Это комплексная задача, и решать нужно все сразу и скопом! Опять фантазируешь. Какой-то отдел выдумал. Который сидит и тужится над одной записью. Ты там укурен, чтоле? Где ты видел такие отделы, которые сидят и потеют над записью? А уведомление может быть где угодно, почта, пуш сообщение, голуби. Это не относится к задаче управление одновременным редактированием данных несколькими пользователями. EDUARD SAPOTSKIКлиен хочет динамическое обновление! Ему ты не докажешь что сам дурак. Надо значит надо! Какое еще динамическое обновление? Опять фантазируешь? EDUARD SAPOTSKIМСУГлупости. Не нужны ни две, ни три даты. Это никому не нужная информация. Нужно только знать, когда и кто застолбил запись. Да. В большинстве случаев это прокатывает, но бывают и привередливые клиенты. Да класть на привиредливость. Есть кейс в виде управления одновременным редактированием данных несколькими пользователями. Есть решение - кнопка "Извлечь". Алгоритм работы я объяснил, он проще пареной репы. Всё остальное - это глупое выдумывание каких-то идиотских мультиков, типа динамического обновления, отдела с записью и прочего бреда. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 22:33 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
МСУViPRosпропущено... это тоже глупость, все это лишнее (ты все равно не сможешь повлиять на ход событий - или прав нет (инфа о юзерах закрыть от тебя), или тот более привлегирован чем ты, и т.д.) Какой ход событий, ты о чем? Пользователь Вася Пупкин застолбил запись, т.к. у него есть на это права. Остальные сосут болт до тех пор, пока запись не освободится. В чем проблема? Да и с какого перепуга информация о Васи Пупкине закрыта от меня? Мне вообще нравится ваша с Эдиком затея - вечно пытаетесь накрутить каких-то левых требований, пытаетесь додумать новых задач и просто фантазий. Не нужно никакой лапши. Кейс простой - управление одновременным редактированием данных несколькими пользователями. Точка. Вот тут есть немного аналитики. http://codearticles.ru/articles/1842 просто в очень многих компаниях не обязательно, что бы кто то знал - чем счас занимается вася пупкин и к чему это знание - будешь звонить директору типа выйди козел хочу тут поредактировать? :) проезжали все это с остановками за 35 лет ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 23:04 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
МСУ, алгоритм извлечь (заблокировать реально) простой, когда система продумано, атак одни дедлоки и смерть "систем" ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 23:05 |
|
Как реализовать одновременное редактирование таблицы несколькими пользователями?
|
|||
---|---|---|---|
#18+
ViPRosпросто в очень многих компаниях не обязательно, что бы кто то знал - чем счас занимается вася пупкин и к чему это знание - будешь звонить директору типа выйди козел хочу тут поредактировать? :) проезжали все это с остановками за 35 лет Да, звони, пиши, стучись в двери. Или жалуйся администрации приложения. А ты как хотел, чтобы само все у работало? Чудес не бывает. Учи пользователей ответственно работать. Это уже административная задача для руководства. Взял запись, поработал и отпусти. И не нужно тут выдумывать левые кейсы, обобщать и накручивать. Для нештатных ситуаций есть админ, всё остальное сами юзеры разрулят. Причём это не технический админ может быть, а руководитель подразделения, наделенный правом возвращать документы других пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2014, 23:11 |
|
|
start [/forum/topic.php?fid=20&fpage=103&tid=1402271]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 339ms |
total: | 476ms |
0 / 0 |