Задать вопрос
@Vladizzzlove
Начинающий Java-разработчик

Как решить проблему организации многопользовательской работы с базой данных Microsoft Access?

Надо организовать многопользовательскую работу с базой данных Microsoft Access.
Проблема:
Была попытка разместить файл Front-End'а на Google Диске и раздать доступ нескольким пользователям, но возникла проблема: при открытии файла одним пользователем, Access создает файл блокировки (.laccdb), из-за чего другие пользователи не могут вносить изменения. Google Диск (и подобные облачные хранилища) не решает эту задачу, и в результате не происходит синхронизация данных между пользователями в реальном времени.
Вопрос:
Рассматриваем вариант с приобретением сетевого хранилища (NAS), например, Synology DiskStation, с последующим развертыванием на нем СУБД MariaDB.
Скажите пожалуйста, поможет ли эта связка (NAS Synology DiskStation + MariaDB) решить проблему блокировок и организовать стабильную одновременную работу?
Существуют ли другие, возможно, более простые способы?
Если мы переедем на такую архитектуру, будет ли автоматически обновляться Front-End (интерфейсный .accdb -файл) у всех пользователей при его обновлении на сервере?
  • Вопрос задан
  • 102 просмотра
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • ProductStar
    Excel для аналитики
    2 месяца
    Далее
  • Столица
    Формирование ИКТ компетентности учителя в рамках ФГОС. Технологии работы в MS Office
    3 недели
    Далее
Пригласить эксперта
Ответы на вопрос 4
master_z
@master_z
Программист
Скорее всего ты настраиваешь подключение в Access у каждого клиента в монопольный доступ, а нужно в не монопольный. Тогда твой вариант окажется рабочим. Но это для небольшого количества клиентов и базы данных. Некий простой вариант. Кроме того это делает данные открытыми, лёгкими для взлома, в результате любой может скопировать файл базы данных и взломать её. Если это внутри в локальной сети для нескольких пользователей, то можно расшарить. Иначе нужно искать клиент-серверные решения. Чтобы как-то защитить данные нужно разрабатывать подключение со скрытым паролем. Т.е. должна быть база данных запаролена, и только программа-клиент должна знать пароль.
Это моё минимальное видение ситуации.
Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\SERVER\Share\DB.accdb; Jet OLEDB:Database Locking Mode=0; Persist Security Info=False;   
' Shared режим (общий), минимальные блокировки — классический многопользовательский режим Access

Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\SERVER\Share\DB.accdb; Jet OLEDB:Database Locking Mode=1; Persist Security Info=False;   
' Optimistic Locking (рекомендуется) — пользователи не блокируют записи друг другу, меньше конфликтов

Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\SERVER\Share\DB.accdb; Jet OLEDB:Database Locking Mode=0; OLE DB Services=-1;   
' Общий режим + пула соединений — быстрее при множестве коротких запросов

Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\SERVER\Share\DB.accdb; Jet OLEDB:Database Locking Mode=1; Jet OLEDB:Database Password=123;   
' Оптимистические блокировки + пароль базы

Provider=Microsoft.ACE.OLEDB.16.0; Data Source=\\SERVER\Share\DB.accdb; Jet OLEDB:Database Locking Mode=1;   
' Оптимистические блокировки (движок ACE 16 — Office 2019/2021/365)
Ответ написан
Комментировать
@rPman
Итак microsoft access изначально умеет в многопользовательский доступ, если базу разместить на сетевом диске (или в пределах одного компьютера, например terminal services).

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

Как 'база данных в файле' access однозначно опередил свое время, все в одно месте, интерфейс и хранилище, среда разработки... но майкрософт, в угоду своей visual studio похерили всю разработку.

Настоятельно рекомендую, если вам нужно именно windows GUI и простота разработки, использовать microsoft visual studio (даже community версии будет достаточно), в нее встроены wysivyg средства по работе с базой данных (саму базу можно разрабатывать хоть в том же access но лучше в адекватных средах, кстати если все еще нужно хранилище в файле то можете еще выбрать sqlite). Сам access как база данных никаких особых проблем не создаст (кроме вендорлок само собой на windows), есть всякие dbforge с ее поддержкой.
Ответ написан
Комментировать
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Пора бы уже вырасти из этой песочницы, оставить в ней все совочки с ведёрками, и начать использовать какое-то решение из 21 века.

Купить дешевый VPS, поставить на нём Марию
Портировать в неё базу из аксесса
Дальше на чём угодно - Ява, Питон, Пхп - написать веб-морду к этой базе.
Ответ написан
На отдельный пк устанавливаете марию. Создаете там какую вам нужно базу с таблицами. Создаете на рабочем компе odbc ля подключения к марии (лучше использовать mysql connector) Затем создаете в акцесе связку с удаленными таблицами марии и делаете интерфейс на эти таблицы. Блокировки не будет. Можно будет работать удаленно одновременно. Единственно вам лучше в аксе создать авторизацию и сделать журналирование событий, чтобы было понятно, какой пользователь внес изменения.
На счет интерфейса и его обновления, то нет. Нужно будет скидывать новую версию юзерам. Либо придумать программку для проверки обновлений и скачивания нового файлика с сервера. Кстати можно попробовать средствами акса это сделать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы