以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  _Identify”被约束为是唯一的  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97640)

--  作者:cuicuibing
--  发布时间:2017/3/16 8:36:00
--  _Identify”被约束为是唯一的
.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2015.12.22.1
错误所在事件:
详细错误信息:
列“_Identify”被约束为是唯一的。值“42422”已存在。

sql数据,增加行时提示如上。

--  作者:狐狸爸爸
--  发布时间:2017/3/16 8:43:00
--  
你用什么代码增加行的啊
--  作者:有点色
--  发布时间:2017/3/16 9:53:00
--  
 频繁的新增和删除,有可能出现这种问题。注意你写的代码,改变操作的思路。
--  作者:cuicuibing
--  发布时间:2017/3/16 10:35:00
--  
If Forms("产品编辑1").Opened() Then
    For Each r1 As Row In  Tables("工序库维护选择_Table1").GetCheckedRows
        If r1("配色") < 2  Then
                    Dim r2 As Row = Tables("产品编辑1_Table4").AddNew
                    r2("组件名称") = r1("部件名称")
                    r2("产品工序规格") = r1("产品工序规格")
                   
                    cmd2.commandText = "S elect * From {工序表} where  工序编号 = \'" & r1("工序编码") & "\'"
                    dt2 = cmd2.ExecuteReader(True)
                    Dim cmd1 As New SQLCommand
                  S elect * From {工序表新} where  工序编号 = \'" & r1("工序编码") & "\'"
                    dt1 = cmd1.ExecuteReader(True)
                    If dt1.DataRows.Count = 0 Then
                        Dim r As DataRow = dt1.addnew
                        r("工序编号") = dt2.DataRows(0) ("工序编号")
                        r("工序名称") = dt2.DataRows(0)("工序名称")
                        r("工序规格") = dt2.DataRows(0)("工序规格")
                        r("工序说明") = dt2.DataRows(0)("工序说明")
                      
                        dt1.save
                    End If
                   
                    cmd.commandText = "Se lect * From {工序价格} where  厂内单价 = \'" & r1("厂内单价") & "\' and 修改定额 = \'" & r1("修改定额") & "\'   "
                    dt = cmd.ExecuteReader(True)
                    If dt.DataRows.Count = 0 Then
                       
                        rr("修改定额") = dt2.DataRows(0)("修改定额")
                        rr("工段标准") = dt2.DataRows(0)("工段标准")
                        Dim cmd3 As New SQLCommand
                        Dim Key As Integer
                        cmd3.C
                        cmd3.commandText = "S elect [顺序号] From {编号} Where [前缀] = \'JG\'"
                        Do
                            Key = cmd3.ExecuteScalar() \'从后台获得顺序号
                            cmd3.commandText = "U pdate [编号] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = \'JG\'"
                            If cmd3.ExecuteNonQuery() > 0 Then \'更新顺序号
                                Exit Do \'更新成功则退出循环
                            End If
                        Loop
                        rr("价格编号") = "JG" & Format(Key,"0000000000")
                        r2("价格编号") = "JG" & Format(Key,"0000000000")
                        dt.save
                    Else
                        r2("价格编号") = dt.DataRows(0)("价格编号")
                    End If
       
    e.Form.Close()
    Tables("产品编辑1_Table4").save()
   
End If

--  作者:有点色
--  发布时间:2017/3/16 11:14:00
--  

你把dt、dt1、dt2的save代码删除,看是否还报错。然后逐个打开,看是哪个datatable有问题。

 

尽量不要用你那种方式增加行。建议还是把表加载出来,可以不加载数据,但新增行,直接在对应的表新增,而不是在查询表新增。