我正在尝试修复数据库中的一些关系。我创建了备份数据库的 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/
我可以更改以获得常量名称。
这是让它发挥作用的方法吗?
我尝试删除锁定文件但没有成功。
所以,我能够克服锁表问题
If Not Left(rel.Name, 4) = "MSys" Then 'exclude system
relations
Debug.Print rel.Name
.Relations.Delete Name:=rel.Name
End If
无法删除系统关系。 学到了新东西。 不过,在所有关系消失之前,我确实必须运行几次。 知道为什么会发生这种情况吗?
从 xml 文件设置属性以重建它们仍然存在问题。
为什么不在 Access 中创建一个新的空白数据库,然后从另一个数据库导入数据(表)。
导入时,您可以选择忽略(不导入)关系。
所以,这个选项:
(单击选项按钮,它会展开选项),
因此,取消选中上面的“关系”框,这样您就可以导入“某些”表,或全部表,但关系将不会被导入。
如果源数据库说已损坏,这通常是一个不错的选择,因为您可以选择前 10 个表(或 5 个)或其他表,然后看看您能走多远。
由于您刚刚创建了一个空白的新数据库,因此“版本”和其他内容现在对于您正在使用的访问版本来说是最新的。
因此,如果出于某种原因您不想弄乱或更改源数据库中存在的关系,我会尝试上述想法。
因此,尝试创建一个新的空白数据库,然后从该数据库导入表 - 但请确保在此导入过程中取消选中“关系”框。