【问题标题】:Update an Access Link Table when the underlying SQL Server table's columns change当基础 SQL Server 表列更改时更新访问链接表
【发布时间】:2010-10-19 19:07:40
【问题描述】:

在工作中,我们有一个 SQL Server 数据库,多个用户使用 Access 2003 连接到(只读)。

这很好,但现在他们查看的其中一个表经常重新创建,并且此过程的一部分涉及交叉表查询。

这意味着,根据数据,每次重新生成表时,列的数量和名称可能会发生变化。

但是,当他们从 Access 中查看重新创建的表时,它仍然显示该表第一次链接到时存在的列标题。

有没有一种方法可以在每次打开 Access 数据库时以编程方式重新链接表?

【问题讨论】:

    标签: sql-server ms-access vba


    【解决方案1】:

    我最终做的是创建一个如下所示的 VBA 函数(需要错误处理!)

    Public Function ReConnectToLinkTable()
    
    Dim db As Dao.Database
    Dim tdf As Dao.TableDef
    
    Set db = CurrentDb
    Set tdf = db.CreateTableDef("local_table_name")
    
    tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=server_name;UID=user_name;" & _ 
                  "PWD=password;APP=Microsoft Data Access Conponents;" & _
                  "DATABASE=database_name"
    tdf.Attributes = TableDefAttributeEnum.dbAttachSavePWD
    tdf.SourceTableName = "server_table_name"    
    
    db.TableDefs.Delete ("local_table_name")
    db.TableDefs.Append tdf
    
    End Function
    

    然后我创建了一个名为 AutoExec 的宏(这个名字保证在打开 Access 文件时会调用它),它有一个 RunCode 的 Action,它调用 ReconnectToLinkTable() 函数。

    【讨论】:

    • 为什么每次启动应用都运行它?为什么不尝试打开链接表上的记录集,如果失败,然后重新链接表。
    • @David - Access 数据库不是“真正的应用程序”,它只是一些技术含量较低的用户的一些数据的前端。他们通常将数据导出到 Excel 以生成各种报告,每次打开 Access 数据库时,表结构都有 90% 以上的可能性发生变化。 (因为它依赖于数据,如果数据发生变化,用户只会再次打开Access文件)
    【解决方案2】:

    当服务器上的表或视图被更改时,ODBC 链接表会中断。某些更改可能会导致它们变为只读,而其他更改则根本不会包含所有列。

    我发现更新连接字符串并不能成功解决这个问题。它通常会修复缺失的字段,但它仍然可以是只读的。唯一可靠的方法是即时重新创建链接表。

    另一种选择是根本不使用链接表,而是使用具有适当连接字符串的已保存 QueryDef。这永远不需要更新,但可能是性能问题,因为存储在表链接中的元数据有助于 Access 确定如何检索数据。如果没有将元数据存储在表链接中,则每次运行查询时都必须从服务器检索该信息。

    【讨论】:

    • 谢谢你给了我一些东西来搜索最终导致我的解决方案
    【解决方案3】:

    通常使用this snippet 之类的东西。在 google 上搜索“ms access refresh link table”,你会发现各种类似的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多