以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- 按年月日自动编号的问题? (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=87212) |
||||
-- 作者:zsslly -- 发布时间:2016/7/6 0:48:00 -- 按年月日自动编号的问题? 如上案例,在帮助中学习到这一段代码? If e.DataCol.Name = "日期" Then If e.DataRow.IsNull("日期") Then e.DataRow("编号") = Nothing Else Dim bh As String = Format(e.DataRow("日期"),"yyyyMMdd") \'取得编号的8位前缀 If e.DataRow("编号").StartsWith(bh) = False \'如果编号的前8位不符 Dim max As String Dim idx As Integer max = e.DataTable.Compute("Max(编号)","日期 = #" & e.DataRow("日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大编号 If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(9,3)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("编号") = bh & "-" & Format(idx,"000") End If End If End If
求助能不能实现,一但编号完成则前面的日期列中的日期在怎么变,编号列中的编号不变,也就是说一次成型!但同时要保证编号列中的编号一定没有相同编号,那怕有几万或几十万条编号,不重号!求老师指点?
|
||||
-- 作者:Hyphen -- 发布时间:2016/7/6 9:13:00 -- 去掉日期的判断,直接取序号即可,类似 If e.DataCol.Name = "日期" Then If e.DataRow.IsNull("日期") Then e.DataRow("编号") = Nothing Else Dim bh As String = Format(e.DataRow("日期"),"yyyyMMdd") \'取得编号的8位前缀 Dim max As String Dim idx As Integer max = e.DataTable.Compute("Max(编号)"," [_Identify] <> " & e.DataRow("_Identify")) \'取得该天的最大编号 If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(9,3)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("编号") = bh & "-" & Format(idx,"000") End If End If 前提是顺序号要足够长,比如要达到千万级的数据,必须要8位顺序号,即Format(idx,"00000000")
|
||||
-- 作者:yinyb36 -- 发布时间:2016/7/6 9:30:00 --
|