为什么MS Access 2007不允许插入行,但在下次插入尝试时允许它?

Mik*_*ebb 8 c# sql key insert ms-access-2007

我的插入声明是:

INSERT INTO myTable (inst_id,user_id,app_id,type,accessed_on)
VALUES (3264,2580,'MyApp','Renew',Now);
Run Code Online (Sandbox Code Playgroud)

...所有值都正确格式化的地方.该表具有上述字段和另一个,长int自动增量键字段.外键是'inst_id','user_id'和'app_id'.

我从Access收到此错误: 访问错误

...以及错误输出时VS 2005中的以下错误:

System.Data.OleDb.OleDbException:您向表请求的更改未成功,因为它们将在索引,主键或关系中创建重复值.更改包含重复数据的字段或字段中的数据,删除索引或重新定义索引以允许重复条目,然后重试.

在进行此插入查询时,我可以查看数据库并查看每个外键值是否存在于各自的表中并且已经持续数月(对于我正在使用的特定示例).这些字段也设置为我可以有重复,所以这不是问题.在其他表格中这种性质的呼叫效果很好.我不需要在插入查询中提供自动增量键值,它会自动为我添加(就像它应该).

奇怪的是,如果我在我的代码中这样做:

try
{
    //Execute the query here...
}
catch
{
    //Execute the same query again
}
Run Code Online (Sandbox Code Playgroud)

...或者如果我只是尝试在Access中执行两次,它就可以了.

有没有人遇到过这个?同样,这种类型的插入适用于其他表,所有外键都存在于它们各自的表中,该表的主键设置为'自动增量',所有字段(当然不是主键字段)是设置为允许重复.

有任何想法吗?

编辑:插入前最大的密钥:343085.插入后最大的键:343086.格式为:

id: AutoNumber (Field Size=Long Interger, New Values=Increment, Indexed=Yes - No Duplicates)

inst_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)

user_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)

app_id: Text (Field Size=255, Required=Yes, Indexed=Yes - Duplicates OK)

type: Text (Field Size=50, Required=Yes, Indexed=No)

accessed_on: Date/Time (Default Value=Now(), Required=Yes, Indexed=No)
Run Code Online (Sandbox Code Playgroud)

Cha*_*ins 1

在这里回顾一些旧记忆......

尝试在表中添加时间戳字段。

我不记得为什么会这样——与 Access 难以识别记录/可能是某种锁定或索引怪癖有关。几年前,当我的一张桌子发生这种情况时,我对此进行了一些研究。

该错误所指的键违规不是另一个表中丢失的键,而是同一个表中的重复键。有时,Access 会出现交叉情况,并认为分配给新记录的键已分配给表中的另一条记录。我不知道是什么原因导致这种情况发生。但通过在表中放置时间戳字段,会导致 Access 产生不同的思考方式。

这是一个令人沮丧的修复,因为我不知道它为什么有效。现在我的表中有一个无用的时间戳字段。但就这样吧。