三、按日期和类别编号
假定有个表,需要按月自动生成编号,根据工程代码按顺序编号,前4位是工程代码,然后是4位年,2位月,最后4位是顺序号,如下图所示:
其实如果你看懂了前面的例子,这个例子就是多余的,无非就是在服务器端记录每一个前缀的最大序号,遇到客户端申请编号的时候,将最大序号加1,然后返回给客户端。
编程的是千变万化的,但万变不离其宗,基本原理明白了,就可以举一反三,以不变应万变。
接下来我们看看是不是和第一个例子一样。
服务端的设计
1、在服务端的全局代码中编写代码:
Public flbhs As new Dictionary(of String,Integer)
2、在服务端的AfterOpenProjet事件中编写代码:
Dim dt As DataTable
Dim cmd As New SQ1LCommand
cmd.ConnectionName = "数据源名称"
cmd.CommandText = "Se1ect 工程代码,Year(制单日期) As 年, Month(制单日期) As 月, Max(单据编号) as 单据编号 From {工程} Group By 工程代码,Year(制单日期), Month(制单日期)"
dt = cmd.ExecuteReader
flbhs.Clear()
For Each dr As DataRow In dt.DataRows
Dim qz As String = dr("工程代码") & "-" & dr("年") & Format(dr("月"),"00") '编号前缀,4位工程代码,4位年,2位月
Dim bh As String = dr("单据编号")
Dim id As Integer
If bh.Length = 16 Then
bh = bh.SubString(12)
If Integer.TryParse(bh,id) Then
flbhs.Add(qz, id)
End If
End If
用OpenQQ实现网络环境下的编号
用上面代码进行编号,服务端红字代码有以下问题:
1,红字代码是一个表编号,如果只能是一个独立业务表的编号,那样有100张表就要重复100次红字代码,这样代码量会非常大?
2,还是做为一个公共表编号“工程”来编号,给所有业务表的编号使用,如果是这样代码量相对少一些?