【问题标题】:Change an access Primary key with relationships使用关系更改访问主键
【发布时间】:2011-02-02 12:50:43
【问题描述】:

我在 access 2007 accdb extension 中有一个数据库,或多或少有 30-40 个具有相关主键“local_number”的表。它是一个长度为 10 的文本主键。

如何在不删除之前所有 30 关系的情况下将此主键的长度更改为 30。

  1. 类似的问题。 我需要为我的 PK“local_number”添加一个组合主键。我需要添加一个“日期”作为组合 PK。 如果我首先删除所有关系,则访问仅允许此操作。

如何避免此警告并更改我的 PK 忽略此消息。

在每个表中进行组合PK的原因是需要记录中的历史数据变化。

更新,有人知道这是否可能,或者我必须删除所有关系?

【问题讨论】:

    标签: database ms-access database-design primary-key ms-access-2007


    【解决方案1】:
    1. 使用现有关系制作数据库副本。

    2. 删除原始副本中的所有关系。

    3. 然后使用code to copy the relationships从备份到原始副本。

    我假设您为正在编辑的 PK 字段保留相同的名称,但即便如此,您也可以更改引用 URL 处 MS 知识库中的代码以解决此问题。

    【讨论】:

    • 感谢您的解决方案,真的很有帮助并节省了时间。
    • 嗨,大卫,我为 PK 保留了相同的名称,但 PK 索引发生了变化。现在我不需要这个带索引的字段。但是在我将此选项更改为无索引或字段的索引属性从是(重复确定)更改后,关系没有从原始文件复制。但我不知道如何修改该代码。错误似乎在“ThisDb.Relations.Append ThisRel”这一行中,您能帮我修改代码以允许在索引更改后复制关系吗?
    • 该行出现的错误是什么?您可能在某个 PK 字段中有重复记录,因此您将无法重新创建关系。
    • 出现错误是因为我添加了一个日期作为撰写主键,然后我需要在 microsoft 的代码中添加一些行以将此字段添加到现有关系。谢谢你的帮助。该链接非常有用。
    【解决方案2】:

    您可以使用自动访问数据库对象模型和 VBA 代码

    1. 在对应表中添加新字段(PK 和 FK)
    2. 基于已经存在的关系,将所有FK值更新为对应的PK值,
    3. 打破现有关系
    4. 创建新关系

    要知道哪些关系必须被替换,您可以浏览您的数据库对象。

    这段代码可以激发你的灵感(即时编写/可能有错误/查看相应的帮助):

    for i = 0 to mydatabase.Relations.count - 1
        Debug.Print mydatabase.relations(i).name
        for j = 0 to myDatabase.relations(i).fields.count -1
            debug.print myDatabase.relations(i).fields(j).name
        next j
    next i
    

    【讨论】:

    • 谢谢,你能解释一下第二步吗?在第 3 步和第 4 步中,这意味着我需要修改的每一个现实,我都必须删除并重新创建它?
    • 第 2 步:假设您有 Tbl_Main,其中 PK 是 id_Main,和 Tbl_Child,其中 PK 是 id_Child,其中 id_Main 是外键。然后,您将在 Tbl_Main 和 Tbl_Child 中创建一个字段 id_MainNew。使用现有关系,您将使用 Tbl_main.id_MainNew 值更新 Tbl_Child.id_MainNew。在步骤3中,删除Tbl_Main和Tbl_Child之间存在的基于id_Main的关系。在第 4 步中,在 Tbl_Main.id_MainNew 和 Tbl_Child.id_MainNew 之间创建一个新关系
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多