以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  代码自动编号出现重复编号  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=38301)

--  作者:SZDVYE
--  发布时间:2013/7/25 12:28: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.Compute("Max(账目编号)","类别 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大账目编号
                If max > "" Then \'如果存在最大账目编号
                    idx = CInt(max.Substring(8,5)) + 1 \'获得最大账目编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("账目编号") = lb & "-" &Format(idx,"00000")
            End If
        End If
End Select

--  作者:Bin
--  发布时间:2013/7/25 12:31:00
--  
你"账目编号"是字符串列吧?

上个例子吧.你这样做不行的.会一直重复获得同一个最大值.你弹出一下你获得的MAX就知道了.

--  作者:SZDVYE
--  发布时间:2013/7/27 0:26:00
--  
"账目编号"是字符串列,已经重新上传例子,请指点.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:流水帐编号.rar


[此贴子已经被作者于2013-7-27 10:43:30编辑过]

--  作者:lsy
--  发布时间:2013/7/27 6:40:00
--  
数据源没有,表还是临时的。
--  作者:SZDVYE
--  发布时间:2013/7/27 12:28:00
--  
已经重新上载
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:流水帐编号.rar


--  作者:lsy
--  发布时间:2013/7/27 13:25:00
--  

自动编号放在DataColChanged中,操作很被动,每次修改,编号都改变,修改越多,编号越乱。

放在BeforeSaveDataRow中,只会改变一次,而且保存过的数据又不允许修改的话,就能基本保证编号不重复。

如果在网络环境中,请参考网络环境下的自动编号。


--  作者:SZDVYE
--  发布时间:2013/7/27 14:11:00
--  
报错了.   

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20130727135421.jpg
图片点击可在新窗口打开查看



--  作者:lsy
--  发布时间:2013/7/27 14:15:00
--  

Select e.DataCol.Name

    Case "账号"

 

 

End Select

 

删除。


--  作者:SZDVYE
--  发布时间:2013/7/27 17:31:00
--  
老师,按照您的意思改了,要保存时才会产生.我系统不能经常的去自动保存,否则系统会很繁忙的.比较郁闷.
[此贴子已经被作者于2013-7-27 17:32:13编辑过]

--  作者:e-png
--  发布时间:2013/7/27 17:43:00
--  
以下是引用lsy在2013-7-27 13:25:00的发言:

自动编号放在DataColChanged中,操作很被动,每次修改,编号都改变,修改越多,编号越乱。

放在BeforeSaveDataRow中,只会改变一次,而且保存过的数据又不允许修改的话,就能基本保证编号不重复。

如果在网络环境中,请参考网络环境下的自动编号。

没有看懂您对DataColChanged的描述?  111 改成 222 编号一定要变的,而且也只变一次呀。

 

楼主说的会重复,我测试怎么没有呢?只会重新编号的。  具体怎样操作才会重复?

 

[此贴子已经被作者于2013-7-27 17:46:33编辑过]