MS Access删除然后追加tabledef break querydef

时间:2017-05-19 14:15:16

标签: vba ms-access access-vba

遵循此问题线程,能够成功编码"使用C#"更改访问2007中链接表的源表的建议更改。但是,看起来该客户的查询使用在查询级别定义的关系进行编码,并且删除/追加过程会破坏关系。任何人都知道如何保持关系?为什么tabledef.Sourcetable无法更新?

代码片段:

选项比较数据库

子测试() Dim tdf As TableDef Dim db As Database

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

End Sub

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

我按照其他线程指出了这个问题(如上所述),并成功使用tdf.delete / tdf.append调用来复制tabledef,其中包含新的源表名和连接信息。但是,依赖查询的关系定义已消失,查询无法使用,无需重新定义所有链接。

1 个答案:

答案 0 :(得分:0)

帕金斯,谢谢,就是这样。表定义略有不同,因此当使用delete / append时,它会“破坏”相关查询中的关系(是连接)。使用数据库视图来解决这个问题,它工作正常。然而,它仍然将查询从之前的位置“移动”为与原始表对象相关。我们的客户至少会拥有他们当前的数据,而不是每周快照。再次感谢。