我有一个带有以下表的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)值?
答案 0 :(得分:1)
否,您不能在向导中使用该代码并立即更改MasterID
。此外,它仅复制当前记录。
您有N个名为Sub1
至SubN
的表,所以为什么不创建N个查询(qryDupSub1
至qryDupSubN
),这将创建与{{1 }},并用MasterID = [OldMasterID]
中的MasterID
保存它们?
可以这样定义查询(例如[NewMasterID]
的示例)(就像您一样,我使用“ ...字段”)
Sub1
您可以创建代码来循环执行所有PARAMETERS OldMasterID long, NewMasterID long;
INSERT INTO Sub1 (MasterID, ... field)
SELECT [NewMasterID], ... field
FROM Sub1 WHERE MasterID = [OldMasterID];
查询,并从窗体上的控件(在我的示例中为文本框N
和txtOldMasterID
)中获取两个参数的值:
txtNewMasterID