Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 通过ODBC缓存数据库访问Excel-锁定许可证问题_Ms Access_Excel_Odbc_Intersystems Cache_Vba - Fatal编程技术网

Ms access 通过ODBC缓存数据库访问Excel-锁定许可证问题

Ms access 通过ODBC缓存数据库访问Excel-锁定许可证问题,ms-access,excel,odbc,intersystems-cache,vba,Ms Access,Excel,Odbc,Intersystems Cache,Vba,我有一个excel工作簿,里面有25张表格。每个工作表都有一个到MS Access中查询的数据连接。每个访问查询都有一个或多个来自系统间CachéDB的链接表。这是其中一个的连接字符串 Provider=Microsoft.ACE.OLEDB.12.0;用户ID=管理员;数据源=\DIR\SUBDIR\XXX\Database\CAST\CAST\u CLIENT\u SETTINGS.mdb;模式=共享拒绝写入;扩展属性=”;Jet OLEDB:系统数据库=”;Jet OLEDB:注册表路径=

我有一个excel工作簿,里面有25张表格。每个工作表都有一个到MS Access中查询的数据连接。每个访问查询都有一个或多个来自系统间CachéDB的链接表。这是其中一个的连接字符串

Provider=Microsoft.ACE.OLEDB.12.0;用户ID=管理员;数据源=\DIR\SUBDIR\XXX\Database\CAST\CAST\u CLIENT\u SETTINGS.mdb;模式=共享拒绝写入;扩展属性=”;Jet OLEDB:系统数据库=”;Jet OLEDB:注册表路径=”;喷射OLEDB:发动机类型=5;Jet OLEDB:数据库锁定模式=0;Jet OLEDB:全局部分批量Ops=2;Jet OLEDB:全局批量事务=1;Jet OLEDB:新数据库密码=”;Jet OLEDB:创建系统数据库=False;Jet OLEDB:加密数据库=False;Jet OLEDB:不复制压缩上的区域设置=False;Jet OLEDB:没有副本修复的紧凑型=False;Jet-OLEDB:SFP=False;Jet OLEDB:支持复杂数据=False;Jet OLEDB:绕过用户信息验证=False

后台刷新未启用,命令类型为table

Access数据库有25个链接到缓存数据库的ODBC表。access db中有25个查询,每个查询使用一个或多个链接表。记录锁No和记录集类型Dynaset

excel工作簿中有一个带有vba代码的按钮,用于刷新所有25张工作表,以返回最新信息。这只需要几分钟,但问题是它在缓存中锁定了25个许可证,并将它们锁定,直到工作簿关闭。

公司只有50个许可证,所以我不能用这么多。有没有我错过的任何设置可以阻止这一切的发生?我可以更改模式、锁定模式、记录集类型、背景刷新、使用直通模式吗?我可以在vba中写入一些内容,以便在刷新后删除这些锁吗?人们使用此实用程序相对实时地跟踪他们在与缓存数据库对应的应用程序中所做的更改


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

您必须查看按钮后面的代码,看看它是如何工作的。我猜它会同时发出所有25个查询。您可能需要将其更改为仅刷新一个,并等待该任务完成后再刷新下一个任务

我知道这是一篇非常古老的文章,但默认情况下Excel会保持OLEDB/ODBC连接打开(从而锁定正在使用的access数据库)

通过连接字符串进行的任何配置都不会阻止Excel执行此操作。与预期相反,将模式设置为share deny none或read only并不能让您摆脱麻烦。但是,您可以通过代码修改连接的属性,以使用
.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

谢谢你的回答。我在书中的所有工作表中循环,并执行以下操作-Selection.QueryTable.Refresh BackgroundQuery:=False。有没有办法让进程等到1个查询更新后再移动到下一个查询,或者我需要使用某种睡眠功能?这篇文章可能会帮助您: