追加查询失败的密钥违规

时间:2013-05-30 13:57:36

标签: sql append

我的追加查询由于密钥违规而失败,但只有一条新记录,旧记录通常只添加我添加的新记录失败。

DoCmd.RunSQL "INSERT INTO [Order_Item] ([Order_ID],[Item_ID],[Quantity]) Values (" & orderNumber & ", [Enter Item ID], [Enter Quantity])"

Order_ID和Item_ID是外键

2 个答案:

答案 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)

我刚刚解决了一个由密钥违规问题引起的类似问题。我学到的两个教训可能会对其他遇到类似问题的人有所帮助:

  1. 确保您的关系图显示了每个表-我没有显示(并且非可见表链接到一个可见表,这就是问题链接)。忘记设置的链接太容易了!

  2. 如果不确定查询中的哪个字段导致键冲突错误,请在表的空白字段中输入有效值-如果是引起问题的字段,它将告诉您哪个字段需要一个相关的条目。

如果这是一个“实时”系统,当然要格外警惕,并删除所有“测试”数据!