Foxtable(狐表)用户栏目专家坐堂 → 关于编号问题


  共有4710人关注过本帖树形打印复制链接

主题:关于编号问题

帅哥哟,离线,有人找我吗?
lgz518
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
关于编号问题  发帖心情 Post By:2022/6/7 14:17:00 [只看该作者]

三、按日期和类别编号

假定有个表,需要按月自动生成编号,根据工程代码按顺序编号,前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,还是做为一个公共表编号“工程”来编号,给所有业务表的编号使用,如果是这样代码量相对少一些?





 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/7 14:29:00 [只看该作者]

学会变通一下,加一个表名列

表名+编号格式做键即可
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("工程代码") & "-"  & dr("") & Format(dr(""),"00") '编号前缀,4位工程代码,4位年,2位月

 回到顶部