|
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
|
|
Многопользовательское приложение23.07.2012, 21:26. Показов 11810. Ответов 26
Метки нет (Все метки)
Привет товарищи программисты! Есть вопрос касательно проектирования приложения WinForms. Планирую создать приложение, многопользовательское приложение, что-то на подобии журнала заявок. Заявка может создаваться, вешаться на конкретных людей, редактироваться, менять свое состояние и т.п.
Вопрос следующий: Каким способом организовать работу приложения с базой данных? Суть вопроса состоит в том, как предотвратить одновременные запросы. То есть, 2 пользователя одновременно открывают заявку, редактируют ее и затем решают сохранить изменения. Разумеется сохранены будут те данные, которые записал пользователь, нажавший на кнопку "Сохранить" позже. Мне следует избежать этой проблемы. Заранее спасибо!
0
|
|
| 23.07.2012, 21:26 | |
|
Ответы с готовыми решениями:
26
Многопользовательское приложение с бд Многопользовательское приложение Многопользовательское приложение бд |
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
| 25.07.2012, 14:04 | |
|
Если транзакционность, или блокировка записи поможет другому (кроме заблокироваашего) приложению понять, что конкретная запись взята редактирование от имени такого-то юзера, это было бы удобным решением. Но я такого способа применения транзакций и блокировок не знаю пока )
0
|
|
|
|
||||
| 25.07.2012, 14:05 | ||||
|
2
|
||||
|
47 / 47 / 7
Регистрация: 09.06.2012
Сообщений: 148
|
|
| 25.07.2012, 15:01 | |
|
в принципе косвенно "отловить" работу чужой транзакции возможно. К примеру поставить для вашей транзакции режим блокировки nowait, тогда sql вернет Вам сообщение с ошибкой о возникшем конфликте с более ранней транзакцией.
0
|
|
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
| 25.07.2012, 18:32 | |
|
и держать транзакцию открытой пока первый юзер ненаредактируется?
как-то неудобно. я бы остался с вариантом таблички блокировок. Оно и "второму" пользователю можно будет показать, кто держит запись, чтобы он мог пойти и сказать ему, и это уже юзеролюбиво ) А вот для обработки автоматически поступающих данных предложенный Вами подход вполне даже оправдан, и если источник данных напорется на такую блокировку, то это будет сигналом о несогласованности поступающих данных. По предложению "первый записал остальным ошибка" - это опять таки не юабилитично - гораздо лучше пользователю в момент открытия бланка редактирования сделать его readonly, и сказать, что такой-то уже редактирует эту запись, чем торжественно обломать пользователя после того, как он, потратив время и силы, заполнит много полей данных и радостно нажмёт кнопку "сохранить". Да и много WHERE предполагает индексы по всем контролируемым полям (тормоза при вставке), либо тормоза при обновлении, что тоже не всегда приемлемо. Короче, все технологии и подходы хороши, но у каждой есть своя областть оптимальной применимости.
1
|
|
|
47 / 47 / 7
Регистрация: 09.06.2012
Сообщений: 148
|
|
| 25.07.2012, 20:20 | |
|
ksk, согласна с Вами насчет юзабилити. Но все–таки насчет транзакций хочу добавить, что транзакция будет выполняться единожды при каждом сохраннии данных. При плвторном редактировании производится уже следующая (новая) транзакция, так что из–зяа одного пользователя вся работа не встанет. А транзакцию без ожидания при ее прерывании можно перезапустить. И ообще, насколько я знаю, по умолчанию любая операция с данными рассматртвается СУБД в качестве транзакции с ожиданием
0
|
|
|
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
|
|
| 25.07.2012, 21:18 [ТС] | |
|
ksk, как не крути но самый оптимальный вариант это твой. И прозрачен и универсален и легко расширяем.
Но всем остальным тоже спасибо, есть над чем поразмыслить!
0
|
|
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
| 25.07.2012, 22:24 | |
|
Besnywka, всё правильно. Только я не понял, что в Вашем варианте будет делаться между чтением данных и их записью, в то время, пока пользователь будет редактировать данные в окне программы. Что должно в это время защитить другого пользователя от того, чтобы он начал редактировать эту же запись?
Клиент должен держать открытую транзакцию из окна редактирования? В принципе это должен быть работоспособный вариант (правда, я не пробовал так делать). И я не знаю, что будет, если в этот момент отключат питание клиенту / порвётся сеть итд. Сервер просто удалит из transaction_log незакоммиченную транзакцию и разблокирует запись? Kilimangaro, рад, если оно было полезным. Другие методы тоже существуют, но я сторонник "ручной работы" именно в силу гибкости такого подхода.
0
|
|
| 25.07.2012, 22:24 | |
|
Многопользовательское приложение, работающее с одной БД Многопользовательское приложение и работа с локальными БД Многопользовательское приложение для работы с БД SQL Server Скомпилировать приложение так, чтобы другое приложение было у него в ресурсах Многопользовательское приложение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|