以文本方式查看主题 - 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 -- "账目编号"是字符串列,已经重新上传例子,请指点.
[此贴子已经被作者于2013-7-27 10:43:30编辑过]
|
||||
-- 作者:lsy -- 发布时间:2013/7/27 6:40:00 -- 数据源没有,表还是临时的。 |
||||
-- 作者:SZDVYE -- 发布时间:2013/7/27 12:28:00 -- 已经重新上载
|
||||
-- 作者:lsy -- 发布时间:2013/7/27 13:25:00 -- 自动编号放在DataColChanged中,操作很被动,每次修改,编号都改变,修改越多,编号越乱。 放在BeforeSaveDataRow中,只会改变一次,而且保存过的数据又不允许修改的话,就能基本保证编号不重复。 如果在网络环境中,请参考网络环境下的自动编号。 |
||||
-- 作者:SZDVYE -- 发布时间:2013/7/27 14:11:00 -- 报错了. |
||||
-- 作者: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编辑过]
|