以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=120874)

--  作者:Springamy
--  发布时间:2018/6/25 15:38:00
--  [求助]关于报错


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看

 

 

你好!

 如图 ,这是一个添加行数据的功能,在弹出的窗口中列所赋的值都是正确的,

但是不能填充到表的列中,并报错,请帮忙看看哪里出错

代码可以执行添加行addnew,并执行cpr("校验")="已成功添加!"
,但是就是中间添加行填充数据哪里不执行,并报上图错误,masbox弹出数据正确的

 

For Each Ary As String() In Arys
    cpr= DataTables("添加产品").Find("变更后的长编码=\'" & ary(0)  & "\'" )
    \' msgbox(cpr("变更后的长编码") & " , " & cpr("短编码")  & " , " & cpr("产品大类"))
    If  cpr IsNot Nothing Then
        If cpr("长编码")="" Then
            If cpr("校验").Contains("OK") Then
                dr  = DataTables("窗口_Table2").Find("长编码=\'" &  ary(0) & "\'")
               
                If dr Is Nothing Then  \'找不到
                    Dim k3s As String =cpr("变更后的长编码").SubString(0,cpr("变更后的长编码").LastIndexOf(".") )
                    msgbox("K3S=\'" & k3s & "\'")
                   cmd.CommandText = "select * fr om t_item where Flevel = 2 AND FNumber =\'" & k3s & "\'and FItemClassID=4"
                   
                    Dim dt As DataTable = cmd.ExecuteReader
                    If dt.DataRows.Count>0 Then
                        msgbox(ary(0) )
                        r=Tables( "窗口_Table2" ).AddNew
                        r("类别码") = 4  

                        r("上级节点") = dt.DataRows(0)("FParentID")
                        r("层数") = 3
                        r("长编码") = ary(0)
                        r("短编码")=ary(1)
                        r("型号") = cpr("型号")
                        r("描述") = cpr("描述")
                        r("FExternID") = -1
                        r("FDetail") =1
                        r("FBrNo") =0
                        r("FFullNumber") = ary(0)
                        r("FDiff") =0
                        r("FDeleted") =0
                        r("UUID") =""
                        r("FGRCommonID") =-1
                        r("FSystemType") =1
                        r("FUseSign") =0
                        r("FAccessory") =0
                        r("FGrControl") =0
                        r("FModifyTime") =""
                        r("FHavePicture") =0
                                                                                            
                        cpr("校验")="已成功添加!"
                    Else
                        cpr("校验")="已重复,不能添加!"
                    End If
                End If
            End If
        End If
        DataTables("窗口_Table2").Save

     


 


--  作者:Springamy
--  发布时间:2018/6/25 15:39:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:4.png
图片点击可在新窗口打开查看
表结构如上图
--  作者:有点甜
--  发布时间:2018/6/25 16:34:00
--  

表结构有问题,每个列的属性 允许null设置成true。不然,你每个列都必须输入值,才能保存。

 

对于唯一值的判断,约束为唯一的列,也必须唯一才行。


--  作者:Springamy
--  发布时间:2018/6/25 16:58:00
--  

表结构是规定这样的,我也是全部列都有赋值,FitemClassID不是唯一的,是外键,为什么报错说类别码被束缚为唯一的值,

长编码确实是唯一的 我在添加之前有校验数据,确定原来数据库没有这个长编码才添加的.

主要问题在于,代码执行了AddNew,添加行,赋值的代码全部没有执行,然后执行最后一个赋值,给临时表校验列赋值"已成功添加"

但是事实上只添加了行,数据并没有填充.


--  作者:有点甜
--  发布时间:2018/6/25 17:11:00
--  

Tables( "窗口_Table2" ).AddNew

 

试试改成

 

Dim ndr As DataRow = Tables( "窗口_Table2" ).DataTable.AddNew

 

-----------------

 

是addnew的时候,就报错了,还是赋值的时候报错,还是保存的时候报错?