以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- openQQ网络环境编号 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=125271) |
-- 作者:qaz17909 -- 发布时间:2018/9/25 10:51:00 -- openQQ网络环境编号 采用openQQ网络自动编号,可以实现递增,但问题是,如果删除最后一个,重新增加的时候,不能连号,例如,001,002,但是删除了最后这个002这个号再重新增加,直接跳到003,可否仍然为002 |
-- 作者:有点甜 -- 发布时间:2018/9/25 11:52:00 -- 1、不连号是正常正确的做法,一般编号不连号是没问题的。
2、如果你需要把断号的补回来,你可以做一个【断号表】,先去这个断号表找,没有断号再重新生成。你删除行的时候,把断号新增到断号表。 |
-- 作者:playmal -- 发布时间:2020/5/21 19:28:00 -- 如何做,有没有例子? |
-- 作者:有点蓝 -- 发布时间:2020/5/21 20:50:00 -- 建表会吧?删除行的时候,到删除事件,把编号数据新增到编号表会吧?到生成编号的代码里,先到【断号表】查询,查询数据会吧?如果查询有结果,就取编号。如果没有按正常方式生成编号。 在服务端的OpenQQ服务端事件ReceivedMessage中编写代码: Dim msg As String = e.Message If msg.StartsWith(":f") AndAlso msg.EndsWith("f:") Then msg = msg.SubString(2, msg.Length - 4) Dim cmd As new SQLCommand() cmd.ConnectionName = "Orders" \'指定数据源 Try cmd.BeginTransaction() \'开启事务 cmd.CommandText = "select top 1 * From 断号表 Where 类型 = " & msg & " order by 编号" Dim dt As DataTable = cmd.ExecuteReader() \'继续使用同一个SQLCommand执行其它SQL语句. If dt.dataraows.count > 0 Then cmd.CommandText = "Delete From 断号表 Where [_Identify] = " & dt.dataraows(0)("_Identify") cmd.ExecuteNonQuery() cmd.Commit() \'提交事务 e.ReturnValue = dt.dataraows(0)("编号") Return end if cmd.Commit() \'提交事务 Catch ex As Exception \'如果出错 cmd.Rollback() \'则回滚事务 End Try 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 |