以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助] openQQ 网络环境下编号 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=124673) |
-- 作者:zcgmxf -- 发布时间:2018/9/11 19:03:00 -- [求助] openQQ 网络环境下编号 老师,有两个问题: 1、openQQ 编号,如果删除后就空号了,如何实现删除后仍然连续编号? 2、如果服务端中途重新启动,新增行编号又会从1号开始,如何实现服务端任何时候启动都从最大编号开始编号? 谢谢!
|
-- 作者:有点蓝 -- 发布时间:2018/9/11 20:22:00 -- 1、不是特别的业务,没有必要使用连号。如果要用,增加一个删号表记录已经删除的号码,取号的时候,先到删号表取,没有再按照常规方式取 2、服务端启动的时候,到数据库查询最大的编号记录下来,帮助有说明的,请仔细看:http://www.foxtable.com/webhelp/scr/3008.htm
|
-- 作者:zcgmxf -- 发布时间:2018/9/11 20:55:00 -- 老师,我的序号是按日生成的,下面的代码是否有误?服务端中途启动新增行序号变成01了。 Dim dt As DataTable Dim cmd As New SQLCommand cmd.C cmd.CommandText = "Sel ect Year(日期) As 年, Month(日期) As 月,day(日期) As 日 ,Max(序号) As 序号 Fr om {订单} Group By Year(日期), Month(日期),day(日期)" dt = cmd.ExecuteReader flbhs.Clear() For Each dr As DataRow In dt.DataRows Dim qz As String = dr("年") & Format(dr("月"),"00") & Format(dr("日"),"00") \'编号前缀,4位年,2位月 Dim bh As String = dr("序号") Dim id As Integer If bh.Length = 10 Then bh = bh.SubString(8) If Integer.TryParse(bh,id) Then flbhs.Add(qz, id) End If End If Next [此贴子已经被作者于2018/9/11 21:03:50编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/9/11 21:08:00 -- 看看下面的提示框都弹出什么内容 Dim dt As DataTable Dim cmd As New SQLCommand cmd.C cmd.CommandText = "Select 日期 ,Max(序号) As 序号 From {订单} Group By 日期" dt = cmd.ExecuteReader flbhs.Clear() msgbox(dt.DataRows.count) For Each dr As DataRow In dt.DataRows Dim qz As String = Format(dr("日期"),"yyyyMMdd") \'编号前缀,4位年,2位月 msgbox(qz) Dim bh As String = dr("序号") msgbox(bh) Dim id As Integer If bh.Length = 10 Then bh = bh.SubString(8) msgbox(bh) If Integer.TryParse(bh,id) Then flbhs.Add(qz, id) End If End If Next |
-- 作者:zcgmxf -- 发布时间:2018/9/11 21:51:00 -- 老师,重新打开服务端,新增行序号还是 01号 |
-- 作者:有点蓝 -- 发布时间:2018/9/11 22:03:00 -- 提示框都弹出什么内容 |
-- 作者:zcgmxf -- 发布时间:2018/9/11 22:23:00 -- 1442,20161209,2016120912,12.再就进入下一条循环了,如果加上 WHERE 日期 = ‘“” & date.today & “”’ 判断 就是 1,20180911,2018091109,9 其实今天有9条了
[此贴子已经被作者于2018/9/11 22:27:35编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/9/11 22:37:00 -- If Integer.TryParse(bh,id) Then msgbox(id) \'这里能不能弹出来 flbhs.Add(qz, id) End If 另外,取序号是怎么取的?写了什么代码
|
-- 作者:zcgmxf -- 发布时间:2018/9/11 22:43:00 -- 可以,9. Dim dt As DataTable Dim cmd As New SQLCommand cmd.C cmd.CommandText = "Sel ect 日期 ,Max(序号) As 序号 Fr om {订单} WHERE 日期 = \'" & Date.Today & "\' Group By 日期" dt = cmd.ExecuteReader flbhs.Clear() For Each dr As DataRow In dt.DataRows Dim qz As String = Format(dr("日期"),"yyyyMMdd") \'编号前缀,4位年,2位月 Dim bh As String = dr("序号") Dim id As Integer If bh.Length = 10 Then bh = bh.SubString(8) If Integer.TryParse(bh,id) Then flbhs.Add(qz, id) End If End If Next 服务端ReceivedMessage Dim msgg As String = e.Message If msgg.StartsWith(":p") AndAlso msgg.EndsWith("p:") Then msgg = msgg.SubString(2, msgg.Length - 4) If flbhs.ContainsKey(msgg) Then \'如果存在这个月的编号 flbhs(msgg) = flbhs(msgg) + 1 \'将该月最大编号加1 Else flbhs.Add(msgg,1) \'如果是这个月的首次编号,则编号等于1 End If e.ReturnValue = flbhs(msgg) \'将编号返回给客户端 End If 客户端 If e.DataCol.Name = "日期" Then If e.DataRow.IsNull("日期") Then e.DataRow("序号") = Nothing Else If QQClient.Ready = False Then PopMessage("QQClient未启动,无法生成编号!","提示",PopIconEnum.Infomation,5) Else Dim bh As String = Format(e.DataRow("日期"),"yyyyMMdd") Dim rt As String = QQClient.SendWait(":p" & bh & "p:") Dim id As Integer If rt > "" Then If Integer.TryParse(rt,id) Then e.DataRow("序号") = bh & Format(id,"00") Else PopMessage("服务器返回错误信息:" & rt,"提示",PopIconEnum.Infomation,5) End If Else PopMessage("服务器无响应,无法生成编号!","提示",PopIconEnum.Infomation,5) End If End If End If End If [此贴子已经被作者于2018/9/11 22:55:55编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/9/11 23:01:00 -- 服务端ReceivedMessage Dim msgg As String = e.Message If msgg.StartsWith(":p") AndAlso msgg.EndsWith("p:") Then msg = msgg.SubString(2, msgg.Length - 4) If flbhs.ContainsKey(msg) Then \'如果存在这个月的编号 flbhs(msg) = flbhs(msg) + 1 \'将该月最大编号加1 Else flbhs.Add(msg,1) \'如果是这个月的首次编号,则编号等于1 End If e.ReturnValue = flbhs(msg) \'将编号返回给客户端 End If |