以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]请教编号代码中的一个问题!!!!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=27518)

--  作者:gaoyong30000
--  发布时间:2013/1/3 16:10:00
--  [求助]请教编号代码中的一个问题!!!!
下面这段代码功能是在当前节点,添加下级节点!
Dim trv As WinForm.TreeView = Forms("ERP界面").Controls("综合部物品分类设置TreeView1")
If trv.SelectedNode.Text <> "全部" Then
    Dim t As Integer = trv.SelectedNode.Text.LastIndexOf(" ")
    Dim s As String = trv.SelectedNode.Text.SubString(0,t)
    Dim i As Integer = s.Length - 2
    
    Dim s2,s3,s4 As String
    Dim dr,dr1,dr2 As DataRow
    Dim n,n1 As Integer
    Dim dt As DataTable = Tables("综合部物品分类设置_综合部物品分类设置Table1").DataTable
    
    dr = dt.AddNew
    s2 =  "SubString(分类编号, 1, " & t & ") = \'" & s & "\' And len(分类编号) = " & t+2
    dr1 =  dt.Find(s2)
    If dt.DataRows.count =1  OrElse  dr1 Is Nothing Then \'dt.DataRows.count =1 是因为有dr = dt.AddNew,增加了一行
        dr("分类编号") = s & "01"
    Else
        For Each dr2 In dt.Select(s2)
            n = right(dr2("分类编号"),2)
            n1= iif(n1<n,n,n1)
        Next
        
        For n  = 1 To n1
            If dt.Find("分类编号 = \'" & s & Functions.Execute("数值转换2",n) & "\'") Is Nothing Then
                dr("分类编号") = s & Functions.Execute("数值转换2",n)
                Exit For

            Else
                dr("分类编号") = s & Functions.Execute("数值转换2",n+1)
            End If
        Next
    End If
End If
With Tables("综合部物品分类设置_综合部物品分类设置Table1")
    .Position = .Rows.Count - 1
End With


图片点击可在新窗口打开查看此主题相关图片如下:未命名.jpg
图片点击可在新窗口打开查看

按道理1004的下级节点中  100402 没有此编号    因此会执行代码中的红色部分  也就是 n=2, dr("分类编号") = s & Functions.Execute("数值转换2",n)  dr("分类编号") = “100402”,结果却是执行的else下的代码  变成了 100411.....   调试了半天不知道为什么~~~~
[此贴子已经被作者于2013-1-3 16:11:00编辑过]

--  作者:e-png
--  发布时间:2013/1/3 18:03:00
--  

Dim s As String = trv.SelectedNode.Text.SubString(0,t)    用SubString(s.Length - 6) 不是简单吗。

 

s2 =  "SubString(分类编号, 1, " & t & ") = \'" & s & "\' And len(分类编号) = " & t+2  是不是dr(···)

SubString(分类编号, 1, " & t & ")  有这种表达方式?

 

、、、、、、 后面没看完了。。。  呵呵。


--  作者:gaoyong30000
--  发布时间:2013/1/4 9:11:00
--  
 测试正常啊 这种表达不妥???

--  作者:lin_hailun
--  发布时间:2013/1/4 9:34:00
--  
 msgbox("分类编号 = \'" & s & Functions.Execute("数值转换2",n) & "\'"), 看看条件是否正确。弹出对应的值,然后思考一下就行了的。

--  作者:gaoyong30000
--  发布时间:2013/1/7 16:05:00
--  
用msgbox测试值

图片点击可在新窗口打开查看此主题相关图片如下:未命名2.jpg
图片点击可在新窗口打开查看
显示为100402
那就应该执行上面红色段的代码  ,但是结果还是添加的1004011


另外我在命令窗口里测试的
 output.show(Tables("综合部物品分类设置_综合部物品分类设置Table1").DataTable.Find("分类编号 = \'1008\'") Is Nothing)

结果
为true    

很奇怪  为true了 但是没执行代码

--  作者:lin_hailun
--  发布时间:2013/1/7 16:11:00
--  
 做个例子,或者联系客服QQ远程协助。
--  作者:gaoyong30000
--  发布时间:2013/1/7 17:04:00
--  
 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目.rar


点击左边的目录树 1004  然后点击  下级按钮(别点同级,同级里代码是错误的)  就发现100402 编号空缺,但是还是增加了100411这个号码

麻烦您了~~~

--  作者:lin_hailun
--  发布时间:2013/1/7 18:24:00
--  
 是很滑稽,我也调了半天,待会再看看。
--  作者:狐狸爸爸
--  发布时间:2013/1/7 19:17:00
--  

看不懂你的代码,很乱,这么简单的要求,并不应该写这么复杂的代码。

 

红色的部分帮你修正了一下,可以避免你说的问题。

 

Dim trv As WinForm.TreeView = e.form.Controls("TreeView1")
If trv.SelectedNode.Text <> "全部" Then
    Dim t As Integer = trv.SelectedNode.Text.LastIndexOf(" ")
    Dim s As String = trv.SelectedNode.Text.SubString(0,t)
    Dim i As Integer = s.Length - 2
   
    Dim s2,s3,s4 As String
    Dim dr,dr1,dr2 As DataRow
    Dim n,n1 As Integer
    Dim dt As DataTable = Tables("表A").DataTable
   
    dr = dt.AddNew
    s2 =  "SubString(分类编号, 1, " & t & ") = \'" & s & "\' And len(分类编号) = " & t+2
    dr1 =  dt.Find(s2)
    If dt.DataRows.count =1  OrElse  dr1 Is Nothing Then \'dt.DataRows.count =1 是因为有dr = dt.AddNew,增加了一行
        dr("分类编号") = s & "01"
    Else
        For Each dr2 In dt.Select(s2)
            n = right(dr2("分类编号"),2)
            n1= iif(n1<n,n,n1)
        Next
       
        For n  = 1 To n1
            If dt.Find("分类编号 = \'" & s & Functions.Execute("数值转换2",n) & "\'") Is Nothing Then
                dr("分类编号") = s & Functions.Execute("数值转换2",n)
            End If
        Next
        If dr.Isnull("分类编号") Then
            dr("分类编号") = s & Functions.Execute("数值转换2",n1+1)
        End If


    End If
End If
With Tables("表A")
    .Position = .Rows.Count - 1
End With


--  作者:gaoyong30000
--  发布时间:2013/1/8 16:09:00
--  
 这代码可以了 

老大 您这代码 我理解了!


但是我那代码 是什么情况?  为什么会有问题?  我分析不出来~~~