Полагаю, вы получаете доступ к файлу MDB из интерфейса клиента, каким бы он ни был, и другие также могут подключаться к одному и тому же файлу одновременно Когда вы используете adModeShareDenyWrite в своем режиме соединения, это означает, что вы все еще можете обмениваться данными с другими (без каких-либо блокировок для таблиц или записей в файле MDB), но это не может быть изменено (поэтому вы получаете ошибку ).
Одним из решений будет управление параметрами вашего соединения, например:
(where you have a user object with a '.role' property, or anything equivalent ...)
if activeUser.role = "admin" then
m_connectionMode = adModeWrite
else
m_connectionMode = adModeShareDenyWrite
endif
Затем вы можете открыть соединение ADO с помощью параметра m_connectionMode. Администраторам будет предоставлено право вставлять / обновлять / удалять, в то время как другие пользователи смогут только просматривать данные. Это означает, что у вас есть где-то в вашей программе или, в идеале, в таблице, некоторые данные, указывающие, кто есть что в вашем приложении.
РЕДАКТИРОВАТЬ: Следующие кратные комментарии с Кори:
Вы не сможете делать то, что хотите, прямо. Мое предложение: когда приложение обращается к базе данных, оно проверяет наличие специального файла в папке .mdb (каким бы он ни был).
Если этот файл существует, приложение открывает соединение «только для чтения».
Если этот файл не существует, приложение создает файл (вы можете создать его, например, с помощью «TransferDatabase») и открыть соединение для чтения и записи. После выхода из приложения уничтожьте файл.