Запретить доступ к блокировке запроса ODBC при определенных условиях - PullRequest
0 голосов
/ 08 октября 2018

Я использую Access VBA для вызова R-скрипта, который строит некоторые диаграммы.Этот сценарий R извлекает некоторые данные из базы данных Access через запрос ODBC.Я использую library(RODBC), чтобы установить соединение с R.

Если я перезапущу Access или запустлю Compact / Repair, запрос всегда будет выполняться.Однако, если я внесу другие изменения в базу данных, иногда получаю следующее предупреждение:

Предупреждающие сообщения: 1: В odbcDriverConnect (sprintf ("Driver = {Microsoft Access Driver (* .mdb), * .accdb)}; DBQ =% s ",: [RODBC] ОШИБКА: состояние HY000, код -3810, сообщение [Microsoft] [Драйвер ODBC Microsoft Access] База данных была переведена в состояние неизвестным пользователем, что не позволяетего нельзя открыть или заблокировать. '

И сценарий не запускается, поскольку соединение не может быть установлено.

Каков наилучший способ управления / установки состояниябаза данных, поэтому запрос будет всегда выполняться? Проблема не связана напрямую с тем, открыта ли таблица или нет - я могу открыть таблицу и закрыть таблицу, и у меня не будет проблемы, и даже запустить ее с открытой таблицей,иногда.

Редактировать: Ошибка вызвана каким-либо изменением в модуле VBA (это не связано с фактическим вызовом сценария VBA, я могу запустить тот же rscript вызвать в командной строке и повторитьОшибка).Теперь, когда я понимаю, что это причина, я не думаю, что это большая проблема.Иногда кажется, что сохранение модуля VBA исправляет ошибку, но не в 100% случаев.

1 Ответ

0 голосов
/ 08 октября 2018

Это специально.

При внесении любых изменений в дизайн модуля, формы или отчета VBA устанавливается эксклюзивная блокировка для файла accdb, который остается до тех пор, пока приложение Access, внесшее изменение, не закроется.

Просто закройте и снова откройте файл после внесения каких-либо изменений в форму, отчет или модуль VBA.

Это одна из причин, по которой люди рекомендуют разделить базу данных, поскольку вы можете изменитьдизайн без блокировки людей из данных.

...