Foxtable(狐表)用户栏目专家坐堂 → 用OpenQQ实现网络环境下的编号-也会重复如何解决?


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

主题:用OpenQQ实现网络环境下的编号-也会重复如何解决?

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


加好友 发短信
等级:六尾狐 帖子:1462 积分:9802 威望:0 精华:0 注册:2020/11/4 22:15:00
用OpenQQ实现网络环境下的编号-也会重复如何解决?  发帖心情 Post By:2025/4/17 10:14:00 [只看该作者]

用OpenQQ实现网络环境下的编号
http://www.foxtable.com/webhelp/index.htm?page=1451.htm

问题一:在单机测试,会重复,不是象帮助说可以解决局域网不重复,但实测不行
问题二:删除下面测试,与有下面代码,效果一样,下面代码好象是可以,可有可无?

2、在服务端的AfterOpenProjet事件中编写代码:

Dim dt As DataTable
Dim
 cmd As New SQLCommand
cmd
.ConnectionName = "数据源名称"
cmd
.CommandText = "SelecGt 工程代码,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
Next


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


加好友 发短信
等级:超级版主 帖子:113511 积分:578050 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/4/17 10:25:00 [只看该作者]

请上传实例说明

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


加好友 发短信
等级:狐精 帖子:3231 积分:21465 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2025/4/17 10:33:00 [只看该作者]

并发不大的情况都没必要用这种方式

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


加好友 发短信
等级:六尾狐 帖子:1462 积分:9802 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2025/4/21 9:46:00 [只看该作者]

问题一:在单机测试,会重复,不是象帮助说可以解决局域网不重复,但实测不行
问题二:删除下面测试,与有下面代码,效果一样,下面代码好象是可以,可有可无?

2、在服务端的AfterOpenProjet事件中编写代码:

Dim dt As DataTable
Dim
 cmd As New SQLCommand
cmd
.ConnectionName = "数据源名称"
cmd
.CommandText = "SelecGt 工程代码,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
Next

上面代码是可有可无,帮助为什么要写?不知这个作用是什么?

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:新建文件夹.zip




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


加好友 发短信
等级:超级版主 帖子:113511 积分:578050 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/4/21 10:22:00 [只看该作者]

【服务端的AfterOpenProjet事件中编写代码】肯定是有用的,目的是为了获取需要生成编号的表,所有前缀的最新最大的编号。然后在openqq的ReceivedMessage中对最大编号进行+1返回给客户端使用。如果没有这段代码,生成的编号肯定是有重复的。

可以这样说,帮助提供的代码基本都不可能是可有可无的,如果连基础的语法都没有学会的情况下就没有必要质疑帮助了。

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


加好友 发短信
等级:超级版主 帖子:113511 积分:578050 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/4/21 10:23:00 [只看该作者]

另外提示一下,这种用法如果要配合回收表使用,回收表的编号不能大于当前在用的最大编号

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


加好友 发短信
等级:六尾狐 帖子:1462 积分:9802 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2025/4/21 10:38:00 [只看该作者]

1
【服务端的AfterOpenProjet事件中编写代码】肯定是有用的,目的是为了获取需要生成编号的表,
1.有问题就是这个只写一张表,服务端与客户端,一对一?如果是的,客户端有100张服务端这里不是也写100张,会不会严重影响性能?
2.在上面实例测试,加上面代码,测试还是会重复,没有限制重点,
3.用法如果要配合回收表使用,回收表的编号不能大于当前在用的最大编号,在哪里改代码,其代码如何写?

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


加好友 发短信
等级:超级版主 帖子:113511 积分:578050 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/4/21 10:54:00 [只看该作者]

1、首先,帮助只是使用一张表来做例子,描述解决编号的一种处理方法。用户要学的是解决问题的方法,而不是只会抄代码。针对不同的使用场合要学会变通使用,帮助的很多用法都是如此,教会用户处理问题的思维和解决方案,而不是提供现成的用法直接用,这是不可能的。

这个例子的重点是,只有一个生成编号的地方(服务端),这样客户端就不会有重复的编号

2、不可能有重复,因为所有客户端都是通过服务器生成编号的,ReceivedMessage事件是按顺序执行的,10个人取编号,都必须等待前面的人处理完毕,才能获取新的编号,所以不可能有重复

3、回收表的编号是怎么来的?

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


加好友 发短信
等级:六尾狐 帖子:1462 积分:9802 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2025/4/21 12:32:00 [只看该作者]

楼上实测
问题1:发生重号,无论是否加上2、在服务端的AfterOpenProjet事件中编写代码,关键是确实发生重号?
问题2:在服务端无论是否加上加上2、在服务端的AfterOpenProjet事件中编写代码,客户端都可生成编号,所以疑或,是要还不要?这个一张,写多张,客户端都可生成编号,
所以疑或,服务端与客户存在什么关系,是一对一,一对多?它不象另一种方法,服务端一张编号规则表,设定所有表的编号,客户端的表的生成编号,都从这服务端编号规则表取。
问题3:昨天把2、在服务端的AfterOpenProjet事件中编写代码,狐表内置ET模式,改为ADO模式一直报错,早上测试还一直报错,特别怪,没改代码,现在再打开,没报错,
      这个什么原因?
问题4:这个突然就好,有好几个,比 IF  当前用户的角色=编辑者,按条件1加载数据,否则,按条件2加载数据,实测多次一直没报错,没判定条件查询,今天,再实则,突然就好,
        可以判定条件查询。
         这种代码看起没问题或有报错,对此代码做修改情况下,却在突然就好,这什么原因?
问题5:你们实测没问题,我们实测也有问题?

很头大




[此贴子已经被作者于2025/4/21 12:33:07编辑过]

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


加好友 发短信
等级:超级版主 帖子:113511 积分:578050 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/4/21 13:49:00 [只看该作者]

1、帮助实例我测试没有任何问题

2、不加当然可以生成,不过每次重启服务端都会默认从1开始

3、4、5,请上传真正完全反应实际情况有问题的实例测试

 回到顶部