以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 为什么会供应商编号重复呢? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=105634) |
-- 作者:yancheng -- 发布时间:2017/8/23 11:33:00 -- 为什么会供应商编号重复呢? 代码如下:(如:我原来有GYS001 ; 为什么自动新增时,还会新增一个GYS001呢?)奇怪。是局域网的另一台电脑上增加的。以前好像没有出过错。是不是代码不严谨? \'自动获取合作类型代码并生成供应商编号 S elect e.DataCol.Name Case "类别代码" If e.DataRow.IsNull("类别代码") Then e.DataRow("供应商编号") = Nothing Else Dim lb As String = e.DataRow("类别代码") If e.DataRow("供应商编号").StartsWith(lb) = False \'如果单据供应商编号前缀不符 Dim max As String Dim idx As Integer Dim cmd2 As New SQLCommand cmd2.C cmd2.CommandText = "S elect [_Identify],类别代码,供应商编号 From {供应商} " \'注意要包括主键列 Dim dt2 As DataTable = cmd2.ExecuteReader() \'注意可选参数设置为True If dt2.DataRows.Count > 0 Then max = dt2.Compute("Max(供应商编号)","类别代码 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别代码的最大供应商编号 If max > "" Then \'如果存在最大供应商编号 idx = CInt(max.Substring(3,3)) + 1 \'获得最大供应商编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If Else idx = 1 \'否则顺序号等于1 End If e.DataRow("供应商编号") = lb & Format(idx,"000") End If End If End S elect |
-- 作者:有点甜 -- 发布时间:2017/8/23 11:36:00 -- idx = CInt(max.Substring(3,3)) + 1 \'获得最大供应商编号的后三位顺序号,并加1
改成
idx = CInt(max.Substring(lb.length,3)) + 1 \'获得最大供应商编号的后三位顺序号,并加1 |
-- 作者:yancheng -- 发布时间:2017/8/23 12:15:00 -- lb.length 如上,如果 是:3 那么,两个代码应该是一样的。(我供应商的lb.length,就是:3) 那么,应该没有解决上面的问题。
|
-- 作者:有点甜 -- 发布时间:2017/8/23 12:32:00 -- \'自动获取合作类型代码并生成供应商编号 Select e.DataCol.Name Case "类别代码" If e.DataRow.IsNull("类别代码") Then e.DataRow("供应商编号") = Nothing Else Dim lb As String = e.DataRow("类别代码") If e.DataRow("供应商编号").StartsWith(lb) = False \'如果单据供应商编号前缀不符 Dim max As String Dim idx As Integer max = e.DataTable.sqlCompute("Max(供应商编号)","类别代码 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别代码的最大供应商编号 If max > "" Then \'如果存在最大供应商编号 idx = CInt(max.Substring(lb.length,3)) + 1 \'获得最大供应商编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("供应商编号") = lb & Format(idx,"000") e.DataRow.save End If End If End Select |
-- 作者:yancheng -- 发布时间:2017/8/24 17:24:00 -- cmd2.CommandText = "S elect [_Identify],类别代码,供应商编号 From {供应商} " \'注意要包括主键列 Dim dt2 As DataTable = cmd2.ExecuteReader() \'注意可选参数设置为True If dt2.DataRows.Count > 0 Then 写法,与 max = e.DataTable.sqlCompute("Max(供应商编号 应该没啥区别吧? |
-- 作者:有点甜 -- 发布时间:2017/8/24 18:12:00 -- 有区别的,尽量用 4楼 的代码。 |