我有一张excel工作簿,里面有25张。每个工作表都与MS Access中的查询建立了数据连接。每个访问查询都有一个或多个来自InterSystemsCachéDB的链接表。这是来自其中一个的连接字符串。
Provider = Microsoft.ACE.OLEDB.12.0; User ID = Admin; Data Source = \ DIR \ SUBDIR \ XXX \ Database \ CAST \ CAST_CLIENT_SETTINGS.mdb; Mode = Share Deny Write; Extended Properties =“”; Jet OLEDB :System database =“”; Jet OLEDB:Registry Path =“”; Jet OLEDB:Engine Type = 5; Jet OLEDB:Database Locking Mode = 0; Jet OLEDB:Global Partial Bulk Ops = 2; Jet OLEDB:Global Bulk Transactions = 1; Jet OLEDB:新数据库密码=“”; Jet OLEDB:创建系统数据库= False; Jet OLEDB:加密数据库= False; Jet OLEDB:不复制Compact上的Locale = False; Jet OLEDB:没有复制修复的Compact =错误; Jet OLEDB:SFP = False; Jet OLEDB:支持复杂数据= False; Jet OLEDB:绕过UserInfo验证= False
未启用后台刷新,命令类型为表。
Access DB有25个链接的ODBC表到Cache DB。访问数据库中有25个查询,每个查询都使用一个或多个链接表。每个记录锁定No和Recordset类型动态集。
excel工作簿中有一个带有一些vba代码的按钮,可以启动所有25张表的刷新以恢复最新信息。除了花几分钟之外,这样做很好,但问题是它在Cache中锁定了25个许可证,并在工作簿关闭之前将其锁定。
该公司只有50个许可证,所以我不能使用这么多。我有什么设置可以阻止这种情况发生吗?我可以更改模式,锁定模式,记录集类型,后台刷新,使用传递吗?我可以在vba中写一些内容,以便在刷新后删除这些锁吗?人们使用此实用程序在相对实时跟踪他们在与缓存DB相对应的应用程序中所做的更改。
在它完全废弃之前,我希望那里有人会有一个想法,如果可能的话,它只允许使用一个许可证。谢谢你的帮助。
答案 0 :(得分:0)
您必须查看该按钮背后的代码。我猜它会同时触发所有25个查询。你可能不得不改变它只刷新一个并等到那一个完成后再刷新下一个。
答案 1 :(得分:0)
我知道这是一篇非常古老的帖子,但默认情况下,Excel会保持OLEDB / ODBC连接处于打开状态(从而锁定正在使用的访问数据库。)
通过连接字符串进行的任何配置都不会阻止Excel执行此操作。与预期相反,将模式设置为分享拒绝,或只读将不会让您经历麻烦。但是,您可以通过代码修改连接的属性,以使用t2.ID
属性来防止此行为。用户界面中没有设置来修改此属性。
试试这段代码:
.MaintainConnection