如何组合 Access 2010 数据库并保持关系

Posted

技术标签:

【中文标题】如何组合 Access 2010 数据库并保持关系【英文标题】:How to combine Access 2010 databases and keep relationships 【发布时间】:2016-06-03 17:00:38 【问题描述】:

我正在开发一个现有的 MS Access 2010 应用程序,它有 9 个单独的 .accdb 文件。这些数据库中有 7 个由一个本地表和几个链接表组成,一个本地表与这些链接表具有外键关系。还有一个只有 15 个本地表的数据库,最后是一个包含表单/查询以及指向所有其他数据库中所有其他表的链接的数据库。

我希望最终得到一个“后端” .accdb 文件,其中所有表都存储在本地,一个“前端” .accdb 文件保存带有表链接的表单/查询。

我的具体问题是如何将保存 .accdb 文件的各种数据合并为一个。到目前为止我尝试过的所有操作(导入、转换为本地)都会导致错误或关系丢失。

一个简化的例子是:

Database 1 has
   Local Table A
   Linked Table B
   Linked Table C
   Linked Table D

 Table A has relationships with B, C, D

Database 2 has 
   Local Table B
   Linked Table C
   Linked Table D
   Linked Table E

 Table B has relationships with C, D, E

Database 3 has 
   Local Tables C, D, E

我想最终得到一个后端 Db:

Database Z
   Local Tables A, B, C, D, E with all relationships intact.

这可行吗?非常感谢任何建议。谢谢。

【问题讨论】:

所以外部数据\功能区上的导入不起作用?默认情况下,它导入关系并将链接表保留为链接对象(您可以在本地表中运行生成表查询)。 它可以工作,但结果可能是某些表的两个版本,一个是本地的,一个是链接的。我希望该过程足够智能,可以检测到导入的链接表指向目标数据库中的本地表,因此用导入关系中的本地等效替换链接表。 【参考方案1】:

一种可能是在最终后端数据库中本地创建所有表,确保在“导入对象”对话框(在“选项>>”菜单下)取消选中关系。

然后添加来自 Microsoft 的代码(它很旧,但应该仍然可以使用):https://support.microsoft.com/en-us/kb/210302。使用它仅从每个单独的前端数据库导入关系。

请注意,如果任何关系具有相同的名称,它们将无法导入。

【讨论】:

谢谢 - 有趣的想法。不确定这是否会“按原样”对我有用,因为即使这些链接的对象在当前数据库中,导入的关系仍将使用链接表。但是,我可以将所有后端数据库(包括关系)导入一个数据库并修改 VBA 代码以“修复”每个关系。即关系与指向当前数据库中本地表的链接表的关系,修改关系以使用本地版本。最后,删除链接表。如果我尝试这个并且它有效,我会再次发布。 @Grayman 如果有帮助,我尝试将所有表作为本地表导入一个数据库。然后导入关系例程工作,即使引用的数据库有一个表作为链接。我认为只要名称相同就没有关系,但我不确定。希望其中一种方法对您有用。 谢谢。最终我不得不按照我之前的建议去做。即将所有表和关系导入一个后端数据库。关系已成功导入,但使用链接表而不是本地表。我使用 VBA 代码来查找这些关系,“克隆”它们并修改为使用本地表。然后必须删除原来的关系。

以上是关于如何组合 Access 2010 数据库并保持关系的主要内容,如果未能解决你的问题,请参考以下文章

组合框引用 access 2010 查询

MS Access 2010:未绑定的组合框不会更新

如何在保持表关系完整性的同时从 MS Access 数据输入表单添加数据

如何在 Access 2010 表单上显示“相关数据”

MS Access 2010 多列组合框自动完成

Microsoft Access VBA 2010 如何创建组合框和数组?