【问题标题】:violation of primary key constraint .Cannot insert duplicate key in object using ADO违反主键约束。无法使用 ADO 在对象中插入重复键
【发布时间】:2010-04-09 06:17:06
【问题描述】:

我们正在开发使用 Access2003(VBA) 作为软件语言和 SQL Server 2005 作为数据库的用户应用程序。 我们正在使用 ADO 方法,但遇到了问题。 当用户在 ADO 屏幕中创建新记录并希望在实施后保存记录时,他们会收到此错误: 错误-2147217873违反主键约束'PK_'。无法在对象'Pk_ ...'中插入重复键 任何帮助将不胜感激 提前致谢

【问题讨论】:

  • 您能发布一个插入操作的代码示例吗?否则,我们只是猜测问题可能是什么。

标签: ms-access vba key constraints


【解决方案1】:

出现问题是因为您不能有两个具有相同值的主键。

如果您使用 Ints 作为主键,请记住对其进行自动增量。 如果您使用 GUID 作为主键,您可能会忘记将 guid 设置为默认空 guid 以外的其他内容,并尝试插入和清空 guid 两次。

【讨论】:

  • 好吧,这就是正在发生的事情我得到一个空的 guid,或者更清楚的是一个零 '0000-000....' 的 guid 通常我们使用 stguidgen 来生成一个新的 GUID
【解决方案2】:

您是否尝试插入一条新记录,其主键字段的值已在数据库中。主键字段必须始终包含唯一值。

【讨论】:

    【解决方案3】:

    检查witch columnt 是您的PrimaryKey。如果您尝试插入已经存在的值,那么您将收到该错误。

    【讨论】:

      【解决方案4】:

      您应该从您的代码或在 SQL 端创建您的 PK 值。在 SQL 方面,创建数据库时,您必须指出“myPrimaryKey”字段的默认值为 uniqueIdentifier,而从代码中,您可以有类似

      myRecordset.fields("myPrimaryKey") = stGuidGen()
      

      (查看here 了解stGuidGen 函数)

      每种方法都有一些优点和缺点。通过实现 SQL 方法,您不必再关心生成 PK。通过代码来完成,您可以存储新生成的值而无需重新查询数据库,并立即在您的代码中重用它,这非常有用。

      【讨论】:

        【解决方案5】:

        获取主键列的属性并将标识属性设置为 YES

        【讨论】:

          猜你喜欢
          • 2017-06-09
          • 2021-05-08
          • 2019-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多