删除所有关系和relAttributes

问题描述 投票:0回答:2

我正在尝试修复数据库中的一些关系。我创建了备份数据库的 xml 副本。

我需要先放弃所有现有关系吗?
我尝试了

DropRelationships
来自导入/导出关系

Function DropRelationships()
    With CurrentDb
        For Each rel In .Relations
            .Relations.Delete Name:=rel.Name
        Next
    End With
End Function

我明白了

数据库引擎无法锁定表“MSysAccessStorage”,因为它已被其他人或进程使用。

此外,当尝试导入 xml 文件时,我在这一行收到错误。

relAttr = xmlRel.selectSingleNode("Attributes").Text

它似乎正在寻找类似的字符串值

dbRelationUpdateCascade + dbRelationDeleteCascade

xml 文件有一个数字,如 4352。
我需要创建一个例程来将数字更改为上面的常量名称吗?

我在这里找到了代码 https://www.access-programmers.co.uk/forums/threads/how-to-get-foreigntable-field-and-relationship-types-using-vba.267268/ 我可以更改以获得常量名称。
这是让它发挥作用的方法吗?

我尝试删除锁定文件但没有成功。

ms-access vba6
2个回答
0
投票

所以,我能够克服锁表问题

   If Not Left(rel.Name, 4) = "MSys" Then 'exclude system 
              relations
             Debug.Print rel.Name
          .Relations.Delete Name:=rel.Name
     End If

无法删除系统关系。 学到了新东西。 不过,在所有关系消失之前,我确实必须运行几次。 知道为什么会发生这种情况吗?

从 xml 文件设置属性以重建它们仍然存在问题。


0
投票

为什么不在 Access 中创建一个新的空白数据库,然后从另一个数据库导入数据(表)。

导入时,您可以选择忽略(不导入)关系。

所以,这个选项:

(单击选项按钮,它会展开选项),

enter image description here

因此,取消选中上面的“关系”框,这样您就可以导入“某些”表,或全部表,但关系将不会被导入。

如果源数据库说已损坏,这通常是一个不错的选择,因为您可以选择前 10 个表(或 5 个)或其他表,然后看看您能走多远。

由于您刚刚创建了一个空白的新数据库,因此“版本”和其他内容现在对于您正在使用的访问版本来说是最新的。

因此,如果出于某种原因您不想弄乱或更改源数据库中存在的关系,我会尝试上述想法。

因此,尝试创建一个新的空白数据库,然后从该数据库导入表 - 但请确保在此导入过程中取消选中“关系”框。

© www.soinside.com 2019 - 2024. All rights reserved.