通过 ODBC 缓存 DB 访问 Excel - 锁定许可证问题

Posted

技术标签:

【中文标题】通过 ODBC 缓存 DB 访问 Excel - 锁定许可证问题【英文标题】:Excel through Access through ODBC Cache DB - locking licenses issue 【发布时间】:2014-03-07 17:09:58 【问题描述】:

我有一个 Excel 工作簿,里面有 25 张纸。每个工作表都有一个到 MS Access 中的查询的数据连接。每个访问查询都有一个或多个来自 InterSystems Caché 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:数据库锁定模式=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions= 1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact without Replica Repair= False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False

后台刷新未启用,命令类型为表格。

Access DB 有 25 个链接到 Cache DB 的 ODBC 表。访问数据库中有 25 个查询,每个查询都使用一个或多个链接表。记录锁定 No 和 Recordset 类型 Dynaset 在每个。

在 Excel 工作簿中有一个带有一些 vba 代码的按钮,可以启动所有 25 个工作表的刷新以返回最新信息。这工作得很好,除了需要几分钟,但问题是它在缓存中锁定了 25 个许可证并保持锁定直到工作簿关闭。

公司只有 50 个许可证,所以我不能使用这么多。我是否缺少任何可以阻止这种情况发生的设置?我可以更改模式、锁定模式、记录集类型、后台刷新、使用直通吗?我可以在 vba 中写入一些东西以在刷新后删除这些锁吗?人们使用此实用程序以相对实时跟踪他们在对应于缓存数据库的应用程序中所做的更改。

在它被完全废弃之前,我希望有人能想出一个想法,如果可能的话,它只允许使用一个许可证。谢谢你的帮助。

【问题讨论】:

【参考方案1】:

您必须查看该按钮背后的代码是如何工作的。我猜它会同时触发所有 25 个查询。您可能必须将其更改为仅刷新一个,然后等到该完成后再刷新下一个。

【讨论】:

感谢您的回答。我遍历书中的所有工作表并执行此操作 - Selection.QueryTable.Refresh BackgroundQuery:=False。有没有办法让进程等到 1 个查询更新后再移动到下一个查询,还是我需要使用某种睡眠功能? 这篇文章可能对你有所帮助:link to post【参考方案2】:

我知道这是一篇很老的帖子,但默认情况下 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

【讨论】:

以上是关于通过 ODBC 缓存 DB 访问 Excel - 锁定许可证问题的主要内容,如果未能解决你的问题,请参考以下文章

2019/10/17spss

如何从 .NET 应用程序访问 HSQL DB?

无法使用 MS Access 2007 访问 ODBC DB

如何在客户端配置ODBC来访问远程DB2 for Windows服务器

Access DB查询结果提取

通过 ODBC 连接到 DB2 非常慢