Topic: Блокировка и синхронизация в многопользовательском режиме

Здравствуйте! Работаю в SQLite. Не подскажите, как заблокировать запись при редактировании одного пользователя от другого, и как после редактирования автоматом обновить данные (GRID) у всех активных пользователей?

Re: Блокировка и синхронизация в многопользовательском режиме

Приветствую.


СУБД SQLite довольно простая и не содержит каких либо механизмов для блокировки записи.


Подобную блокировку можно придумать самому, например создать еще одну таблицу, в которой хранить имя таблицы и id записи, которая в данный момент заблокирована каким либо пользователем, также необходимо сохранять время создания блокировки, чтобы предотвратить случаи, когда пользователь заблокировав запись, например аварийно закрыл программу не сняв  блокировку. Зная время создания блокировки, можно считать эту блокировку недействительной через определенный момент времени.


Сделал для вас проект с примером подобной блокировки.

Post's attachments

Attachment icon Lock record for multiuser.zip 10.96 kb, 736 downloads since 2016-10-19 

Dmitry.

Re: Блокировка и синхронизация в многопользовательском режиме

Здравствуйте.
А можно сделать так, чтобы у других пользователей заблокированная запись подсвечивалась красным, например, чтобы они знали, что запись редактирует другой пользователь?

Re: Блокировка и синхронизация в многопользовательском режиме

newusr wrote:

Здравствуйте.
А можно сделать так, чтобы у других пользователей заблокированная запись подсвечивалась красным, например, чтобы они знали, что запись редактирует другой пользователь?

Приветствую.


Скачайте пожалуйста снова пример из предыдущего моего сообщения, добавил.


Запись будет окрашена в красный только после обновления грида, т.е. если пользователь заблокирует запись, другой пользователь увидит это только после обновления грида, например нажатием на кнопку Поиск.

Dmitry.

Re: Блокировка и синхронизация в многопользовательском режиме

спасибо за ответ, обязательно посмотрю.

Re: Блокировка и синхронизация в многопользовательском режиме

А как такое сделать для MySQL?

Re: Блокировка и синхронизация в многопользовательском режиме

Bullet3203 wrote:

А как такое сделать для MySQL?

Для MySQL необходимо заменить SQL запрос, который используется в скрипте

AND datetime(dateandtime, ''+'+IntToStr(LOCK_TIMEOUT)+' seconds'') > datetime(''now'', ''localtime'')

на

AND DATE_ADD(dateandtime, INTERVAL '+IntToStr(LOCK_TIMEOUT)+' SECOND) > NOW()


Проект с примером для MySQL

Post's attachments

Attachment icon Lock record for multiuser MySQL.zip 11.26 kb, 443 downloads since 2017-12-15 

Dmitry.

Re: Блокировка и синхронизация в многопользовательском режиме

DriveSoft wrote:
Bullet3203 wrote:

А как такое сделать для MySQL?

Для MySQL необходимо заменить SQL запрос, который используется в скрипте

AND datetime(dateandtime, ''+'+IntToStr(LOCK_TIMEOUT)+' seconds'') > datetime(''now'', ''localtime'')

на

AND DATE_ADD(dateandtime, INTERVAL '+IntToStr(LOCK_TIMEOUT)+' SECOND) > NOW()


Проект с примером для MySQL

Спасибо большое