防止访问在某些情况下阻止 ODBC 查询
Posted
技术标签:
【中文标题】防止访问在某些情况下阻止 ODBC 查询【英文标题】:Prevent Access from Blocking ODBC Query Under Certain Conditions 【发布时间】:2018-10-08 17:26:26 【问题描述】:我正在使用 Access VBA 调用构建一些图表的 R 脚本。此 R 脚本通过 ODBC 查询从 Access 数据库中提取一些数据。我正在使用library(RODBC)
从 R 建立连接。
如果我重新启动 Access,或运行压缩/修复,查询将始终运行。但是,如果我在数据库中进行其他更改,我有时会收到以下警告:
警告信息: 1: 在 odbcDriverConnect(sprintf("Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s", : [RODBC] 错误:状态 HY000,代码 -3810,消息 [Microsoft][ODBC Microsoft Access Driver] 数据库已被未知用户置于阻止其打开或锁定的状态。'
并且脚本无法运行,因为无法建立连接。
管理/设置数据库状态以便查询始终运行的最佳方法是什么?这个问题与表是否打开没有直接关系 - 我可以打开一个表,然后关闭一个表,没有问题,有时甚至在打开表的情况下运行。
编辑:该错误是由对 VBA 模块进行任何类型的更改引起的(这与脚本的实际 VBA 调用无关,我可以在命令行并复制错误)。现在我明白这是原因,我认为这不是一个大问题。保存 VBA 模块有时似乎可以纠正错误,尽管不是 100% 的时间。
【问题讨论】:
这不能回答你的问题,但是当使用odbc 包而不是RODBC 时它是否有效? 抛出此警告时是否打开过 accdb/mdb 文件?它是本地驱动器还是文件共享? 是的,我假设如果 accdb 文件被关闭,它永远不会成为问题,但它必须是打开的,因为脚本是通过表单中的按钮调用的。我知道我可以将数据库拆分为前端和后端,这可能是一种解决方案,但目前,我更愿意将其合并。 accdb 文件目前存储在 OneDrive 上 @wibeasley 好吧,看看我的编辑,我想我很满意它只是对 VBA 模块的更改导致错误被抛出,所以这并不是什么大问题。感谢您的帮助。 这是一个非常混乱的过程。为什么你从 MS Access VBA 调用 R,然后通过 odbc 连接到同一个数据库?另外,为什么要动态编辑 VBA 模块?在处理代码时,任何对象的设计更改都应该是最终的。 【参考方案1】:这是设计使然。
对 VBA 模块、表单或报表进行任何设计更改都会在 accdb 文件上设置排他锁,直到进行更改的 Access 应用程序关闭为止。
对表单、报表或 VBA 模块进行任何设计更改后,只需关闭并重新打开文件即可。
这是人们建议您拆分数据库的原因之一,因为这样您就可以更改设计而无需将人们锁定在数据之外。
【讨论】:
以上是关于防止访问在某些情况下阻止 ODBC 查询的主要内容,如果未能解决你的问题,请参考以下文章
防止 Emscripten 编译的 JavaScript 阻止某些关键输入