【问题标题】:ms-access DoCmd.RunSQL statement can't add record due to key violation but no records are in tablems-access DoCmd.RunSQL 语句由于键冲突而无法添加记录,但表中没有记录
【发布时间】:2016-08-12 14:14:49
【问题描述】:

我已经运行此查询大约 3 周了,但它突然停止工作。这是我得到的错误:

我的桌子是空的。下面是 INSERT INTO 语句的代码:

SQL$ = ""
SQL$ = SQL$ & " INSERT INTO table1"
SQL$ = SQL$ & " VALUES ('test', 1, '1-1', #01/01/2001#, 1000, 'testing', 'example', 1, 2, 30);

DoCmd.RunSQL SQL$

由于不存在任何记录,因此没有任何内容应该违反主键值。是否有其他违反主键的方法或者这是访问问题?

这是桌子设计:

忽略错误的字段名称,我不得不暂时更改它们以便我可以在这里发布。

我什至尝试在 VBA 之外将其作为 Access 查询运行:

SELECT * FROM table1

它什么也没返回。

更新:

这很有趣。所以 table1 是一对多的关系,如前所述,vNum 是 table1 中的 many。一方面,调用表“oTable”,它已经有一个我从不同数据库导入的 vNum 列表。我最近在 oTable 中使用名为“vTester”的 vNum 创建了一条新记录。在生成上述 SQL 插入语句的 table1 表单中,我可以从组合框中选择我想要的任何 vNum。用户不能选择一个不存在的。在我的表格中,我选择了“vTester”并得到了上述错误。但是,当我选择其中一个导入的 vNum 时,SQL 命令起作用了。有什么想法吗?

【问题讨论】:

  • 请贴一张table1设计视图的截图。如果它有一个自动递增的标识字段(键),您可能会隐式尝试将col1 字符串写入其中。为避免这种情况,请在 SQL 中指定列名:INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);
  • 如果不知道表格设计和您要插入的值,几乎不可能回答这个问题。
  • 我更新了我的问题。 @StackExchanger 我试过了,但仍然有同样的问题
  • 消息没有说“主键违规”,它说“键违规”。我的猜测是您的一个字段与另一个表中的字段有关系。该表必须已经包含您尝试插入相关字段的值。
  • 不,有问题。如果这是一个订单表,其中引用了客户表中的客户编号,则您无法添加其中不存在客户编号的订单。

标签: sql vba ms-access


【解决方案1】:

由于长时间避免输入新记录,我修复并压缩数据库并再次尝试,它可以工作。有时 Access 对我来说就像那样,只需要一个新的(ish)开始。从那以后再也没有发生过!

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2018-10-06
    相关资源
    最近更新 更多