Access 2007 Linkedtable管理器拒绝重新链接具有“附件”数据类型的字段的表。

问题:


将拆分数据库放置在另一个文件夹中时,应使用链接表管理器重新链接表。 但是,Linkedtable管理器确实拒绝重新链接具有“附件”数据类型字段的表。


症状:


打开Linkedtable管理器,然后选择一个带有“附件”数据类型字段的链接表。 现在尝试将表重新链接到另一个文件夹。 如果“旧”路径不存在,Access将抛出错误“无效路径”,或者当该路径确实存在时,拒绝重新链接。


原因:


系统表MSysObjects使用旧路径保存对“ MSysComplexType”的引用。 删除具有“附件”数据类型的表时,不会删除此引用。


解析度:


要重新链接表,有两种选择:

  1. 删除“附件”数据类型字段,重新链接并再次添加该字段。 这仅是“空”或接近空表的选项。 另一个问题是原始数据库中可选添加的库。
  2. 创建一个新数据库以获取一个空的MSysObject,创建一个具有“附件”数据类型字段的表的新链接,最后导入所有其他数据库对象(MSys表除外)和已链接的表。

移动包含“ Attachment”数据类型字段的表的数据库的步骤:


  1. 将所有文件放在新文件夹中。
  2. 更改前端数据库的名称,例如通过在“ .accdb”之前附加“ Old”
  3. 启动MS Access 2007,并在正确的位置创建一个具有原始名称的新数据库。
  4. 打开新数据库,然后直接关闭默认的“ Table1”
  5. 单击NavigationPane中的“所有表”,然后选择“类别导航/对象类型”
  6. 选择“外部数据/导入/访问”,然后选择选项“链接...”。
  7. 使用[浏览]按钮导航到后端数据库,然后按[打开]
  8. 按[确定],仅选择具有“附件”数据类型字段的表,然后按[确定]
  9. 选择“外部数据/导入/访问”
  10. 使用[浏览]按钮导航到“旧”数据库,然后选择“导入...”选项。
  11. 按[确定]。
  12. 在“导入对象”窗口中,为每个对象选项卡按“全选”。 (有六个!)
  13. 注意:在“表”选项卡上,必须取消选择“ MSys ...”表和带有“附件”数据类型字段的表。 (单击它们可获得白色背景)
  14. 关闭“导入对象”窗口,然后转到“数据库工具/数据库工具/ Linkedtable管理器”
  15. 按[全选]并删除不在后端数据库中的表的复选标记。
  16. 选择“总是询问新位置”(左下角),然后按[确定]
  17. 选择后端数据库,然后按[打开]
  18. 关闭Linkedtable管理器。
  19. 现在可以使用该数据库了。

如果有要移动的引用,请在“旧”数据库中使用此功能:


Function fncShowReferences()
'-----------------------------------------------------------
' Input       : None
' Target      : Generating function to create the references in another database
' Created By  : Nico Altink 28/oct/2007
' Last changed: Nico Altink 28/oct/2007
'-----------------------------------------------------------
Dim ref As Reference 
Debug.Print "Function fncCreateReferences()"
Debug.Print "' Skip errors for available references"
Debug.Print "On Error resume next" 
For Each ref In Application.References
   ' Skip the builtin references
   If Not ref.BuiltIn Then
      Debug.Print "Application.References.AddFromFile (""" & ref.FullPath & """)"
   End If
Next 
Debug.Print "End Function" 
End Function


执行此函数后,它将在立即窗口中创建一个函数以放置所有引用。 将其复制/粘贴到新的前端数据库的模块中,然后运行(F5)该功能。