以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于帮助中“自动编号生成方法”一节的疑惑  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=17573)

--  作者:kitty
--  发布时间:2012/3/17 3:19: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("日期") & "#") \'取得该天的最大编号
           
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

 

然而在实践中发现,却是有缺陷,这种编号只适用于新加行时,但一旦你在原来的行里进行日期修改时就会有错误。如下图

 新加行时,选择日期,生成的单号是没有问题的。


此主题相关图片如下:1.png
按此在新窗口浏览图片

在原来日期上面,重新选择另外一个日期时,生成的单号是有问题的。(实际应该为20120302-001)

此主题相关图片如下:2.png
按此在新窗口浏览图片

不知,各位有没有好的更改的方法?

[此贴子已经被作者于2012-3-17 3:21:32编辑过]

--  作者:pb_1
--  发布时间:2012/3/17 10:13:00
--  

Dim BHTEMP As String

BHTEMP=format(e.Form.Controls("DateTimePicker2").Value,"yyyyMMdd")
Dim max As String
Dim idx As Integer

max = Tables("bmk").Compute("Max(BH)","substring([BH],5,8) = " & bhtemp & "" )

If max>"" Then
idx = CInt(max.Substring(12)) + 1

Else
idx = 1

End If


e.form.Controls("LabelBH1").text ="HHZY" & BHTEMP & Format(idx,"00000")

 

 

 

我刚好完成了这个,你参考一下我的代码咯,我生成的编号结构是这样的前缀“HHZY”,中间段就是日期比如”20120317“,后段为变动值五位“00001”

如果是同一日期的,后段变动自增,如果不是同一日期的那么后段默认从00001开始,放在TEXTCHANGED事件里,当日期变化,则重新计算编号

[此贴子已经被作者于2012-3-17 10:39:24编辑过]

--  作者:pb_1
--  发布时间:2012/3/17 10:14:00
--  
看狐表帮助两个月了,呵呵!也能帮忙回答一个问题了