以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  用OpenQQ实现网络环境下的编号-也会重复如何解决?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=196309)

--  作者:lin98
--  发布时间:2025/4/17 10:14:00
--  用OpenQQ实现网络环境下的编号-也会重复如何解决?
用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


--  作者:有点蓝
--  发布时间:2025/4/17 10:25:00
--  
请上传实例说明
--  作者:cd_tdh
--  发布时间:2025/4/17 10:33:00
--  
并发不大的情况都没必要用这种方式
--  作者:lin98
--  发布时间: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




--  作者:有点蓝
--  发布时间:2025/4/21 10:22:00
--  
【服务端的AfterOpenProjet事件中编写代码】肯定是有用的,目的是为了获取需要生成编号的表,所有前缀的最新最大的编号。然后在openqq的ReceivedMessage中对最大编号进行+1返回给客户端使用。如果没有这段代码,生成的编号肯定是有重复的。

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

--  作者:有点蓝
--  发布时间:2025/4/21 10:23:00
--  
另外提示一下,这种用法如果要配合回收表使用,回收表的编号不能大于当前在用的最大编号
--  作者:lin98
--  发布时间:2025/4/21 10:38:00
--  
1
【服务端的AfterOpenProjet事件中编写代码】肯定是有用的,目的是为了获取需要生成编号的表,
1.有问题就是这个只写一张表,服务端与客户端,一对一?如果是的,客户端有100张服务端这里不是也写100张,会不会严重影响性能?
2.在上面实例测试,加上面代码,测试还是会重复,没有限制重点,
3.用法如果要配合回收表使用,回收表的编号不能大于当前在用的最大编号,在哪里改代码,其代码如何写?

--  作者:有点蓝
--  发布时间:2025/4/21 10:54:00
--  
1、首先,帮助只是使用一张表来做例子,描述解决编号的一种处理方法。用户要学的是解决问题的方法,而不是只会抄代码。针对不同的使用场合要学会变通使用,帮助的很多用法都是如此,教会用户处理问题的思维和解决方案,而不是提供现成的用法直接用,这是不可能的。

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

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

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

--  作者:lin98
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2025/4/21 13:49:00
--  
1、帮助实例我测试没有任何问题

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

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