Я выбрал другой подход для следующей ситуации.
Существует база данных Excel, скажем, DataBase.xls и шаблон Excel Programs.xlt, которые не являются общими и находятся в каталоге сетевого сервера / диска. Каждый пользователь использует копию шаблона программ, поэтому Programs1.xls для первого пользователя и Programsn.xls для n-го пользователя.
Правила таковы: Возможно одновременное чтение одновременно. возможна только 1 запись без одновременного чтения (во избежание чтения "наполовину" обновленных записей). Действия чтения и записи стандартизированы и максимально коротки
Я выбрал решение «Рефери / Судья / Арбитр / Арбитр» - я назвал его «Рефери.xls».
Это общий файл Excel, который находится в том же вышеупомянутом каталоге и очень мал: он состоит только из 2 полей - счетчика чтения nRead и счетчика записи nWrite.
Каждый пользователь, который хочет получить доступ к базе данных, отправляет рефери запрос на чтение или запись.
В случае запроса на чтение рефери проверяет / ждет, пока не будет никаких действий записи (больше) (nWrite = 0), а затем предоставит чтение для этого пользователя, увеличив счетчик nRead на 1. После того, как действие чтения завершено, счетчик nRead уменьшается на 1.
В случае запроса на запись рефери проверяет / ждет, пока больше не будет активных действий записи (nWrite = 0), после этого рефери проверяет / ждет, пока все действия чтения будут выполнены (nRead = 0), а затем предоставляет запрос на запись. и установите счетчик nWrite на 1. После того, как действие записи выполнено, счетчик записи nWrite устанавливается в 0. После этого рефери может удовлетворить новые запросы на чтение и / или запись. Ожидания реализуются с помощью функции "Sleep" в Lib "Kernel32" с шагом 1 секунда (1000 миллисекунд). Шаги также подсчитываются, и после 6 шагов / секунд тайм-аут запроса на чтение истекает, запрос на запись истекает через 10 шагов / секунд, но это сильно зависит от многих факторов и должно быть найдено на практике.
Все это очень хорошо работает в среде Excel 2003, Windows XP с максимум 14 одновременными пользователями. Эти пользователи являются менеджерами, работающими в разных местах на площади 5000 квадратных километров, и используют этот инструмент каждый день для обновления информации о медицинской компетентности, личной информации, назначениях и т.д. Для своих сотрудников (в среднем 15 сотрудников на одного менеджера)