Russian Qt Forum
Ноябрь 23, 2024, 21:19
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
Многопользовательский доступ к базе данных (MySql)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Многопользовательский доступ к базе данных (MySql) (Прочитано 6367 раз)
vovan1982
Гость
Многопользовательский доступ к базе данных (MySql)
«
:
Июль 12, 2012, 14:51 »
Привет всем.
Хочу в своей программе сделать многопользовательский доступ.
Есть база данных в MySql есть программа которая с этой базой работает.
В качестве авторизации в программе используются пользователи MySql.
Если одновременно подключиться к базе с разных компьютеров то при обращении к одной и той же строке в таблице естественно будут проблемы.
Хочу сделать следующее, запретить редактирование тех строк в таблице которые уже редактируются другими пользователями.
Смотрел в сторону стандартных средств MySql но ничего подходящего не нашел, транзакции блокируют всю таблицу целиком, а LOCK IN SHARE MODE блокирует строку только на запись, а мне нужно знать редактирует кто нибудь данную строку или нет, следовательно нужно заблокировать строку на чтение.
Думал сделать таблицу блокировок, в которой будут храниться имя таблицы и первичный ключ заблокированной строки, принцип работы предполагал такой, при начале редактирования строки таблицы в программе в таблицу блокировок помещается строка с именем таблицы и первичный ключ, при завершении редактирования эта строка удаляется, но эта таблица теряет смысл в случае аварийного завершения программы потому что строка с блокировкой не удалиться.
Если кто нибудь подобное реализовывал поделитесь опытом.
Рад буду любым советам по теме.
Записан
JayFOX
Гость
Re: Многопользовательский доступ к базе данных (MySql)
«
Ответ #1 :
Июль 12, 2012, 15:29 »
Привет.
Я сделал вот как: у "общей" таблицы сделал две колонки "LockedUp" - время, до которого запись заблокирована, и "LockedBy" - кто заблокировал. Тот кто держит запись обновляет поле "LockedUp" каждые, например, 5 минут и продлевает блокировку. Если пользователь отвалился, и время вышло, то другой может без страха открывать на редактирование, а если время не вышло - то придется 5 минут подождать.
Записан
vovan1982
Гость
Re: Многопользовательский доступ к базе данных (MySql)
«
Ответ #2 :
Июль 12, 2012, 15:47 »
Цитата: JayFOX от Июль 12, 2012, 15:29
Привет.
Я сделал вот как: у "общей" таблицы сделал две колонки "LockedUp" - время, до которого запись заблокирована, и "LockedBy" - кто заблокировал. Тот кто держит запись обновляет поле "LockedUp" каждые, например, 5 минут и продлевает блокировку. Если пользователь отвалился, и время вышло, то другой может без страха открывать на редактирование, а если время не вышло - то придется 5 минут подождать.
Привет.
Очень интересный подход, а не нужные записи как чистишь, к примеру время в "LockedUp" вышло 3-и часа назад и строка которую блокировала эта запись уже удалена, следовательно данная строка в таблице блокировок является мусором, как такие строки чистишь?
Записан
kostya2vntu
Гость
Re: Многопользовательский доступ к базе данных (MySql)
«
Ответ #3 :
Июль 12, 2012, 16:07 »
LOCK IN SHARE MODE + добавить поле LOCKED которое будет устанавливать процесс который заблокировал таблицу на запись, остальные будут его читать и знать что кто-то пишет.
Записан
JayFOX
Гость
Re: Многопользовательский доступ к базе данных (MySql)
«
Ответ #4 :
Июль 12, 2012, 16:15 »
Я не в отдельную таблицу блокировки писал, а дополнительные колонки создал в той, где информация нужная. Как только пользователь прочитал или обновил – он же и стирает всю информацию о блокировке.
Записан
vovan1982
Гость
Re: Многопользовательский доступ к базе данных (MySql)
«
Ответ #5 :
Июль 12, 2012, 16:25 »
Спасибо за ответы.
Принцип реализации понятен, пошел реализовывать
.
Записан
vlad-mal
Гость
Re: Многопользовательский доступ к базе данных (MySql)
«
Ответ #6 :
Июль 12, 2012, 21:10 »
А зачем блокировать-то?
Почему нельзя редактировать локальную копию записи?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...