访问-更改外键后重复父记录和子记录

时间:2018-08-16 19:07:52

标签: ms-access duplicates foreign-keys

我有一个带有以下表的Access 2016数据库:

Master
------
| ID = PK1 | ... field = value |

Sub1
----
| ID = 1 | MasterID = PK1 | ... field = value |

SubN
----
| ID = 1 | MasterID = PK1 | ... field = value |
| ID = 2 | MasterID = PK1 | ... field = value |

我需要一种在Sub1上运行的方法,该方法将允许我(通过)SubN (例如,将PK1的值更改为PK2)在Sub1中创建PK1记录的副本。通过输入值“ PK2”到弹出窗口。假设这些将是包含MasterID = PK2的新记录,即不存在。因此结果将是:

Master
------
| ID = PK2 | ... field = value |

Sub1
----
| ID = 2 | MasterID = PK2 | ... field = value |

SubN
----
| ID = 3 | MasterID = PK2 | ... field = value |
| ID = 4 | MasterID = PK2 | ... field = value |

新按钮向导提供了用于复制记录的代码,简化为:

DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.RunCommand acCmdRecordsGoToNew
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste

这将导致重复项的所有MasterID值都等于PK1 ...是否可以在利用上述代码的同时更改MasterID(FK)值?

1 个答案:

答案 0 :(得分:1)

否,您不能在向导中使用该代码并立即更改MasterID。此外,它仅复制当前记录。

您有N个名为Sub1SubN的表,所以为什么不创建N个查询(qryDupSub1qryDupSubN),这将创建与{{1 }},并用MasterID = [OldMasterID]中的MasterID保存它们?

可以这样定义查询(例如[NewMasterID]的示例)(就像您一样,我使用“ ...字段”)

Sub1

您可以创建代码来循环执行所有PARAMETERS OldMasterID long, NewMasterID long; INSERT INTO Sub1 (MasterID, ... field) SELECT [NewMasterID], ... field FROM Sub1 WHERE MasterID = [OldMasterID]; 查询,并从窗体上的控件(在我的示例中为文本框NtxtOldMasterID)中获取两个参数的值:

txtNewMasterID