Access无DSN链接SQL Server时,不同权限账号链接表权限覆盖问题求助
解决Access链接SQL Server时不同凭据权限被覆盖的问题
问题根源:Access默认启用ODBC连接池,会复用首个建立的数据库连接会话,即便后续TableDef的连接字符串使用不同凭据,实际仍共享同一连接,导致所有表权限被首个链接表的凭据覆盖。
核心解决方案:在每个链接表的连接字符串中添加
OLE DB Services=-2,禁用连接池,强制每个链接表使用独立的连接会话。
VBA代码示例
' 链接只读表 Sub LinkReadOnlyTables() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim strReadOnlyConn As String Set db = CurrentDb() ' 替换为你的服务器、数据库、只读账号信息,关键添加OLE DB Services=-2 strReadOnlyConn = "ODBC;DRIVER=SQL Server;SERVER=你的SQL服务器名;DATABASE=目标数据库名;" & _ "UID=只读账号;PWD=只读密码;OLE DB Services=-2" ' 示例:链接单个只读表,可循环批量处理 Set tdf = db.CreateTableDef("本地只读表名") tdf.Connect = strReadOnlyConn tdf.SourceTableName = "dbo.远程只读表名" db.TableDefs.Append tdf Set tdf = Nothing Set db = Nothing End Sub ' 链接读写表 Sub LinkReadWriteTables() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim strReadWriteConn As String Set db = CurrentDb() ' 替换为你的服务器、数据库、读写账号信息,同样添加OLE DB Services=-2 strReadWriteConn = "ODBC;DRIVER=SQL Server;SERVER=你的SQL服务器名;DATABASE=目标数据库名;" & _ "UID=读写账号;PWD=读写密码;OLE DB Services=-2" ' 示例:链接单个读写表,可循环批量处理 Set tdf = db.CreateTableDef("本地读写表名") tdf.Connect = strReadWriteConn tdf.SourceTableName = "dbo.远程读写表名" db.TableDefs.Append tdf Set tdf = Nothing Set db = Nothing End Sub
- 注意事项:
- 无需在意只读/读写表的链接顺序,每个表的连接都会独立建立
- 确保替换代码中所有占位符为实际的服务器、数据库、账号信息
- 批量处理时可通过循环遍历需要链接的表名列表,避免重复代码
内容的提问来源于stack exchange,提问作者Don Carrier
相关产品推荐
相关产品推荐

