您向表格​​请求的更改未成功

时间:2015-02-13 13:21:21

标签: vb.net ms-access primary-key

在任何人开始喊叫之前#34;重复",让我说我已经彻底搜索了这个问题的解决方案,但没有找到解决方案。

背景信息:我试图从使用Visual Basic 2010 Express编译的Windows窗体程序(exe)插入Access 2003数据库中的一个小表。

在同一个数据库中执行了四个插入语句,每个插入语句在不同的表上,但前三个工作没有问题,它是第四个抛出错误:

cmd = New OleDbCommand("INSERT INTO PrivateTableName 
                        VALUES('" & Serial.Text & "','Pending',
                               '" & coverArea.Text & "','')", myConnection)
Try
     cmd.ExecuteNonQuery()
Catch ex As Exception
     MsgBox("Error attempting to insert into PrivateTableName " & ex.ToString)
     Exit Sub
End Try

我出于隐私目的更改了表名,但请放心,表名无关紧要。

此语句抛出异常

  

您向表格请求的更改未成功,因为它们会在索引,主键或关系中创建重复值

错误本身是不言自明的,然而,完全不可能。下面是表格设计的屏幕截图

table design

请注意,主键不是自动递增的数字。主键是一个序列号(或者更确切地说是一个字符串),它由一个5位数字(从前一个顺序索引)和两个随机生成的字母(即14582KH)组成,我已经验证了它尝试插入的值作为主键并不存在。

我已经尝试过压缩和修复数据库,这对我们没有帮助。此表中的字段与其他表中的字段之间没有关系,它完全独立。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

area列的数据类型为Number,但是使用

将字符串插入其中
"'" & coverArea.Text & "'"

您应该将命令创建为:

cmd = New OleDbCommand("INSERT INTO PrivateTableName VALUES('" & 
 Serial.Text & 
 "','Pending'," 
 & coverArea.Text 
 & ",'')", myConnection)

我无法想象这会在调试模式下工作。只有当你直接对数据库运行INSERT语句时,你可能会使用正确的语法。

更好,更安全的方法是使用DbParameters

答案 1 :(得分:0)

虽然我不确定为什么重要,但指定字段似乎可以解决问题。

cmd = New OleDbCommand("INSERT INTO PrivateTableName ([My Order Number],
[BV Order Number], [Area]) VALUES('" & Serial.Text & _ "','Pending'," &
coverArea.Text & ")", myConnection)

答案 2 :(得分:0)

首先,您应该检查是否有任何错误的字段。如果不是,请选择“是”(重复“确定”)或“否”。