以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]如何按年和类别生成编号? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=19699) |
-- 作者:yangrou -- 发布时间:2012/5/18 12:52:00 -- [求助]如何按年和类别生成编号? 自动编号生成方法 ,我都看了,但还是不会 按年和类别生成编号,请大家帮忙写个,谢谢了! |
-- 作者:FoxMan -- 发布时间:2012/5/18 13:30:00 -- 拿出誠意,寥寥幾個字,誰知道呢? |
-- 作者:yangrou -- 发布时间:2012/5/18 14:00:00 -- 按日期和类别编号 假定有个表,需要按月自动生成编号,根据工程代码按顺序编号,前4位是工程代码,然后是4位年,2位月,最后4位是顺序号,如下图所示: 要自动生成上面的编号,可以将DataColChanged事件代码设置为: Select e.DataCol.Name
|
-- 作者:yangrou -- 发布时间:2012/5/18 14:59:00 -- 我改了 自动编号 的 第一个例子,按 年编号,可以用了,唉,困,运行通过,谁给检查下 If e.DataCol.Name = "日期" Then If e.DataRow.IsNull("日期") Then e.DataRow("编号") = Nothing Else Dim d As Date = e.DataRow("日期") Dim y As Integer = d.Year \'Dim m As Integer = d.year \'Dim Days As Integer = Date.DaysInMonth(y,m) Dim fd As Date = New Date(y,1,1) \'获得该月的第一天 Dim ld As Date = New Date(y,12,31) \'获得该月的最后一天 Dim bh As String = Format(d,"yyyy") \'生成编号的前6位,4位年,2位月. If e.DataRow("编号").StartsWith(bh) = False \'如果编号的前6位不符 Dim max As String Dim idx As Integer max = e.DataTable.Compute("Max(编号)","日期 >= #" & fd & "# And 日期 <= #" & ld & "#") \'取得该月的最大编号 If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(5,3)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("编号") = bh & "-" & Format(idx,"000") End If End If End If
|
-- 作者:yangrou -- 发布时间:2012/5/18 15:00:00 -- 上面的注释没改,将就看吧 |
-- 作者:FoxMan -- 发布时间:2012/5/18 15:10:00 -- Select e.DataCol.Name Case "日期","类别" If e.DataRow.IsNull("日期") orelse e.DataRow.IsNull("类别")Then e.DataRow("编号") = Nothing Else Dim d As Date = e.DataRow("日期") Dim y As Integer = d.Year Dim fd As Date = New Date(y,1,1) \'获得该月的第一天 Dim ld As Date = New Date(y,12,31) \'获得该月的最后一天 Dim bh As String = Format(d,"yyyy") \'生成编号的前6位,4位年,2位月. If e.DataRow("编号").StartsWith(bh) = False \'如果编号的前6位不符 Dim flt,max As String Dim idx As Integer flt ="类别= \'" & e.DataRow("类别") & "\' and 日期 >= #" & fd & "# And 日期 <= #" & ld & "#" max = e.DataTable.Compute("Max(编号)",flt) \'取得该月的最大编号 If max > "" Then \'如果存在最大编号 idx = CInt(max.Substring(5,3)) + 1 \'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("编号") = bh & "-" & Format(idx,"000") End If End If End Select
|