我有一个带有25张纸的Excel工作簿。每个表都有与MS访问中查询的数据连接。每个访问查询都有一个或多个来自IntersystemsCachéDB的链接表。这是其中一个的连接字符串。
提供者= microsoft.ace.oledb.12.0;用户id = admin; data source = dir subdir xxx xxx database cast cast_client_settings.mdb; mode = shose = share deny drite;:系统数据库="; JET OLEDB:注册表路径="; Jet OLEDB:发动机类型= 5; Jet OLEDB:数据库锁定模式= 0; Jet OLEDB:Jet OLEDB:全球部分散装OPS = 2; JET OLEDB:JET OLEDB:全球散装交易=1;喷气OLEDB:新数据库密码="; Jet OLEDB:Create System Database = false; Jet OLEDB:Encrypt Database = false; Jet OLEDB:请勿在Compact上复制Locale compact = false; Jet OledB:Jet Oledb:jet ole oledb:不复制维修的jet Compact =FALSE; JET OLEDB:SFP = FALSE; JET OLEDB:支持复杂数据= false; Jet OLEDB:旁路UserInfo验证= false
背景刷新未启用,命令类型为表。
访问DB有25个链接的ODBC表与缓存DB。访问数据库中有25个查询,每个查询都利用一个或多个链接表。记录锁定和记录集类型的dynaset。
Excel Workbook中有一个带有一些VBA代码的按钮,可以启动所有25张纸的刷新,以带回最新信息。除了花几分钟之外,这一切都很好,但是问题是,它在缓存中锁定了25个许可证,并将其锁定直到关闭工作簿。
该公司只有50个许可证,所以我不能使用很多许可证。我是否缺少任何可以阻止这种情况发生的设置?我可以更改模式,锁定模式,记录集类型,背景刷新,使用通行证吗?我可以在VBA中写一些东西以刷新这些锁吗?人们使用此实用程序来跟踪与实时相对相对中缓存db的应用程序所做的更改。
在完全废弃之前,我希望有人会有一个想法,可以在可能的情况下只使用一个许可证。感谢您的帮助。
您必须查看该按钮后面的代码。我想它同时启动了所有25个查询。您可能必须将其更改为刷新一个,然后等到那一个完成后才刷新下一个。
我知道这是一个非常旧的帖子,但是默认情况下,Excel保持OLEDB/ODBC连接打开(从而锁定了使用的访问数据库。)
没有连接字符串的配置量将阻止Excel这样做。与期望相反,设定分享否认或阅读的模式,不会让您摆脱困境。但是,您可以通过代码修改连接的属性,以防止使用.MaintainConnection
属性。UI中没有设置来修改此属性。
尝试此代码:
Function unlock_conns()
Dim conn
For Each conn In ActiveWorkbook.Connections
Select Case conn.Type
Case xlConnectionTypeOLEDB
conn.OLEDBConnection.MaintainConnection = False
Case xlConnectionTypeODBC
conn.ODBCConnection.MaintainConnection = False
End Select
Next conn
End Function