Ms access MS Access删除然后追加tabledef中断querydef

Ms access MS Access删除然后追加tabledef中断querydef,ms-access,vba,Ms Access,Vba,遵循此问题线程,我们能够成功地通过在access 2007中使用C更改链接表的sourcetable来编码建议的更改。但是,似乎此客户的查询已使用在查询级别定义的关系编码,并且删除/追加过程会断开这些关系。有人知道如何保持这种关系吗?为什么tabledef.Sourcetable无法更新 代码剪报: 选项比较数据库 子测试 将tdf调暗为TableDef dimdb作为数据库 Set db = CurrentDb Open "out.txt" For Output As #1 For Each

遵循此问题线程,我们能够成功地通过在access 2007中使用C更改链接表的sourcetable来编码建议的更改。但是,似乎此客户的查询已使用在查询级别定义的关系编码,并且删除/追加过程会断开这些关系。有人知道如何保持这种关系吗?为什么tabledef.Sourcetable无法更新

代码剪报:

选项比较数据库

子测试 将tdf调暗为TableDef dimdb作为数据库

Set db = CurrentDb

Open "out.txt" For Output As #1
For Each tdf In db.TableDefs
    If tdf.Connect <> vbNullString Then
        Print #1, tdf.Name; " -- "; tdf.SourceTableName; " -- "; tdf.Connect
        Select Case tdf.SourceTableName
            Case "CTITLU.txt"
                'tdf.SourceTableName = "dbo.GRANTSADJS"
                'tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=DCFTDBCL01-L01\EDS_DEV;DATABASE=GRANTSDB2;UID=grants_reader;PWD=xxxxx;TABLE=DBO.GRANTSTABL"
                tdf.RefreshLink
        End Select
    End If
Next
端接头

当我仅在未注释tdf.connect语法的情况下运行此命令时,tdf.refreshlink调用会出现错误,运行时错误为“3011”:Microsoft Access数据库引擎找不到对象“objectname”。。。我正在尝试将文本链接表更新为等效的基于SQL Server的链接表。objectname中确实包含空格和连字符,但它在错误消息中正确显示了该名称。无论出于何种原因,以前的开发人员将表的转储发送到文件系统,而不是直接链接表。这是一个小型数据库,事务性活动非常少,因此几乎不可能导致任何问题。未注释tdf.SourceTableName时,抛出运行时错误“3268”:一旦对象是集合的一部分,则无法设置此属性


我跟随其他线程指出了上述问题,并成功地使用tdf.delete/tdf.append调用使用新的源tablename和连接信息复制tabledef。但是,依赖查询的关系定义已消失,如果不重新定义所有链接,查询将无法使用。

C Perkins,谢谢,就是这样。表定义中有一个细微的差别,当使用delete/append时,它“破坏”了相关查询中的关系yes join。使用DB视图解决这个问题,效果很好。但是,它仍然会将查询从原来的位置“移动”到与原始表对象相关的位置。我们的客户至少会有他们当前的数据,而不是每周的快照。再次感谢。

是同一个连接字符串吗?您应该链接到您正在谈论的代码,或者在问题中发布代码。否则,您的问题将脱离麻烦的根源。不必仅为了更改表链接而删除和附加表。只需更改Connect属性@June7的可能重复项。只有在SourceTableName保持不变时,这才是真的。否则,它确实需要删除并重新附加到TableDefs集合。有人会认为SourceTableName和Connect一样动态,但事实并非如此。