更改链接表源访问 2016

Posted

技术标签:

【中文标题】更改链接表源访问 2016【英文标题】:Changing Linked Table Source Access 2016 【发布时间】:2020-03-11 10:36:56 【问题描述】:

我正在尝试更改 Access 2016 数据库中的链接,但我过去使用的方法无法按要求工作。

我正在使用

 t.connect="new connection"
 t.refreshlink

方法,其中 t 是表。

我在链接表管理器中看到这些表现在按数据源分组。我可以创建新的源并将其链接到所需的表,但我有很多迁移,所以想在代码中执行此操作。

我目前的方式没有错误,但在.refreshlink 之后,表的.connect 仍然相同。

这还有可能吗?

我目前使用表名和现有连接填充字典,但前提是非 ODBC。

然后我在这本字典中循环,获取表格并更改其连接

CurrentDb.TableDefs(strTableName).Connect = strNewConnection
CurrentDb.TableDefs(strTableName).RefreshLink
Debug.Print CurrentDb.TableDefs(strTableName).Connect

现有连接 = ;DATABASE=\\app01\Access\CRM_Data.mdb 新连接=;DATABASE=C:\CRM_TEST\CRM_DATA_BE_2016.accdb

非常感谢

【问题讨论】:

@ErikA 我已经添加了我正在尝试的代码,如果您需要查看其他任何内容,请告诉我。 【参考方案1】:

在更改表时不应使用CurrentDb.TableDefs,因为这会在调用之间发生变化,并使更改连接字符串的 tabledef 引用与刷新链接的引用不同。

Dim d As DAO.Database
Set d = CurrentDb
d.TableDefs(strTableName).Connect = strNewConnection
d.TableDefs(strTableName).RefreshLink

AFAIK 这种行为与版本无关,因此您提供的代码不应该工作。

【讨论】:

当然,您需要为所有表格执行此操作,并且当您添加新表格时,您需要调整代码。请参阅下面的解决方案:设置它并忘记它。 @Vlado 是的,您的“解决方案”包含完全相同的错误,因此根本无法解决此问题... 那么问题出在你的连接字符串上【参考方案2】:

我在 Access 2016 中使用此代码,它工作得很好:

Public Function RelinkTables(environment As Integer)

    On Error Resume Next
    Dim tblDef As DAO.TableDef

    For Each tblDef In CurrentDb.TableDefs    
        If tblDef.Connect <> "" Then
            tblDef.Connect = GetConnectionString(environment)
            tblDef.RefreshLink
        End If    
    Next

End Function

Public Function GetConnectionString(environment As Integer) As String
    Select Case environment
        Case 1 ' connection to Test db
            GetConnectionString = "your connection string to Test"
        Case 2  ' connection to Prod db
            GetConnectionString = "your connection string to Production"
    End Select
End Function

如果这不适用于您的数据库,则可能是路径错误。

【讨论】:

感谢GetConnectionString 正在返回“未定义子或函数”错误?? 这是我的函数,你用你的函数替换 - 返回你想使用的连接字符串。 :-) 或者只是在那里输入您的连接字符串。我保证它有效——我每天都在办公室使用它——在测试和生产之间切换。创建新链接时无需更改代码。它会自动运行。 我把函数GetConnectionString放在那里

以上是关于更改链接表源访问 2016的主要内容,如果未能解决你的问题,请参考以下文章

obiee 找不到逻辑列的逻辑表源覆盖率

在 Access 中更改链接表中的表名

访问链接表连接属性已损坏 - 如何修复(或删除)?

MS Access 2016 在某个链接的 SQL Server 表上崩溃

访问链接表管理

Excel Powerquery-是不是可以“替换”表源(关系、数据透视表)?