在工作中,我们有一个SQL Server数据库,有几个用户使用Access 2003连接到(只读)。
这很好,除了现在他们看到的其中一个表经常重新创建,这个过程的一部分涉及交叉表查询。
这意味着,根据数据,每次重新生成表时,列的数量和名称都可能会发生变化。
然而,当他们从Access查看重新创建的表时,它仍会显示表首次链接时的列标题。
有没有一种方法可以在每次打开Access数据库时以编程方式重新链接表?
答案 0 :(得分:3)
我最终做的是创建一个类似于下面的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动作,它调用ReconnectToLinkTable()函数。
答案 1 :(得分:1)
当服务器上的表或视图发生更改时,ODBC链接表会中断。某些更改可能会导致它们变为只读,而其他更改则不会包含所有列。
我发现更新连接字符串无法成功解决此问题。它通常会修复缺少的字段,但它仍然是只读的。唯一可靠的方法是动态重新创建链接表。
另一种选择是根本不使用链接表,而是使用具有相应连接字符串的已保存QueryDef。这将永远不必更新,但可能是性能问题,因为存储在表链接中的元数据有助于Access了解如何检索数据。如果没有存储在表链接中的元数据,则每次运行查询时都必须从服务器检索该信息。
答案 2 :(得分:0)
通常使用this snippet之类的东西。在谷歌搜索“ms访问刷新链接表”,你会发现各种类似于这个的解决方案。