0

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

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

Order_ID 和 Item_ID 是外键

4

2 回答 2

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
于 2013-05-30T14:57:08.000 回答
0

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

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

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

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

于 2020-06-22T09:27:19.823 回答