我的追加查询由于密钥违规而失败,但只有一条新记录,旧记录通常只添加我添加的新记录失败。
DoCmd.RunSQL "INSERT INTO [Order_Item] ([Order_ID],[Item_ID],[Quantity]) Values (" & orderNumber & ", [Enter Item ID], [Enter Quantity])"
Order_ID和Item_ID是外键
答案 0 :(得分:0)
访问将引发错误。通过相关表中没有的sql向FK插入内容时出现密钥冲突。您可能还会因主键违规而收到类似错误。
以下是一些代码(您需要适应您的模型)来检查相关表格中存在的密钥以及“映射”。在插入之前,映射表中尚不存在。
Select Case True
Case IsNull(DLookup("[ID]", "Table1", "[ID]=" & num1))
MsgBox ("ID does not exist in Table1")
Case IsNull(DLookup("[ID]", "Table2", "[ID]=" & num2))
MsgBox ("ID does not exist in Table2")
Case Not (IsNull(DLookup("[ID1]", "Map", "[ID1]=" & num1 & "And [ID2]=" & num2)))
MsgBox ("Mapping already exists")
Case Else
DoCmd.RunSQL "INSERT INTO [Map] VALUES (" & num1 & ", " & num2 & ")"
End Select
答案 1 :(得分:0)
我刚刚解决了一个由密钥违规问题引起的类似问题。我学到的两个教训可能会对其他遇到类似问题的人有所帮助:
确保您的关系图显示了每个表-我没有显示(并且非可见表链接到一个可见表,这就是问题链接)。忘记设置的链接太容易了!
如果不确定查询中的哪个字段导致键冲突错误,请在表的空白字段中输入有效值-如果是引起问题的字段,它将告诉您哪个字段需要一个相关的条目。
如果这是一个“实时”系统,当然要格外警惕,并删除所有“测试”数据!