以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  自动编号重复,老师看看怎么回事吧  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=119412)

--  作者:guosheng
--  发布时间:2018/5/24 14:35:00
--  自动编号重复,老师看看怎么回事吧
SQLserver数据源。
即使是一个人录入:偶尔也会出现,自动生成的编号有重复的现象。
Dim cr As Row = Tables("发文登记表").Current
    Dim y As Integer = rq.Year
    Dim m As Integer = rq.Month
    Dim Days As Integer = Date.DaysInMonth(y,m)
    Dim fd As Date = New Date(y,m,1) \'获得该月的第一天
    Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天
    Dim bh As String = Format(rq,"yyyyMM") \'生成编号的前6位,4位年,2位月.
    Dim max As String
    Dim idx As Integer
    max = DataTables("发文登记表").sqlCompute("Max(文件编号)","发文部门=\'"& user.group &"\' and 发文登记日期>= \'" & fd & "\' And 发文登记日期<= \'" & ld & "\' And [_Identify] <> " & cr("_Identify")) \'取得该月的最大编号
    If max > "" Then \'如果存在最大编号
        idx = CInt(max.Substring(13,3)) + 1 \'获得最大编号的后三位顺序号,并加1
    Else
        idx = 1 \'否则顺序号等于1
    End If
    cr("文件编号") =dr("部门缩写") & "-FW-" & bh & "-" & Format(idx,"000")
        Tables("发文登记表").save

--  作者:有点甜
--  发布时间:2018/5/24 15:13:00
--  

你部门缩写都是相同数量的字符的吗?如果不是

 

 idx = CInt(max.Substring(13,3)) + 1 \'获得最大编号的后三位顺序号,并加1

 

请改成

 

 idx = CInt(max.Substring((dr("部门缩写") & "-FW-" & bh & "-").length,3)) + 1 \'获得最大编号的后三位顺序号,并加1

 

多人同时录入的时候,有可能重复;但一个人录入的时候如果重复,那不可能。

 

你在保存之前beforeSaveDataRow、DataColChanging事件试试判断重复

 

http://www.foxtable.com/webhelp/scr/2481.htm

 


--  作者:guosheng
--  发布时间:2018/5/24 15:32:00
--  
如果将 编号列的,禁止重复属性,设置为true,是否会避免 多人录入 自动编号 的重复现象? 如此操作会不会造成,重复的话,某些编号为空?
手动编号在列的 datacolchanging事件中容易控制重复;但是若是自动编号不好控制吧?
有一点不太理解,已经使用SQLcompute来判断数据了,为什么编号还会重复呢
[此贴子已经被作者于2018/5/24 15:34:13编辑过]

--  作者:有点甜
--  发布时间:2018/5/24 16:24:00
--  
以下是引用guosheng在2018/5/24 15:32:00的发言:
如果将 编号列的,禁止重复属性,设置为true,是否会避免 多人录入 自动编号 的重复现象? 如此操作会不会造成,重复的话,某些编号为空?
手动编号在列的 datacolchanging事件中容易控制重复;但是若是自动编号不好控制吧?
有一点不太理解,已经使用SQLcompute来判断数据了,为什么编号还会重复呢
[此贴子已经被作者于2018/5/24 15:34:13编辑过]

 

【如果将 编号列的,禁止重复属性,设置为true,是否会避免 多人录入 自动编号 的重复现象? 如此操作会不会造成,重复的话,某些编号为空?】

 

不可以;不会。

 

【手动编号在列的 datacolchanging事件中容易控制重复;但是若是自动编号不好控制吧?】

 

一样的处理一样的代码而已。

 

【有一点不太理解,已经使用SQLcompute来判断数据了,为什么编号还会重复呢】

 

多人同时操作的时候,会有小概率出现重复,如:同一时间有三个sqlcompute查找最大值,得到都是99,然后99+1存放为100,那么就有3个重复值。


--  作者:guosheng
--  发布时间:2018/5/24 18:24:00
--  
如果在保存表时,多执行几遍,sqlcompute和表保存,统计等于生成的编号。如果统计数据>1,则重新编号。  是否会一定程度上解决多人同时操作时编号重复?        老师推荐这个防止重复的链接,应该只能解决  一个人录入的重复,而无法解决多人同时录入重复吧?http://www.foxtable.com/webhelp/scr/2481.htm
[此贴子已经被作者于2018/5/24 20:12:15编辑过]

--  作者:有点甜
--  发布时间:2018/5/24 20:59:00
--  

如果要彻底解决编号是否重复,请加上 _Identify 列的值到你的编号去。此列的值肯定是不重复的。

 

或者是使用openQQ编号 http://www.foxtable.com/webhelp/scr/3008.htm

 

或者 http://www.foxtable.com/webhelp/scr/1994.htm

 


--  作者:guosheng
--  发布时间:2018/5/25 11:35:00
--  
已经将52177和25000/30000的入站规则和安全组加入。
根据老师的说法测试openqq功能,增加行后录入信息,“提示clientqq未启动,无法自动编号”。可能是什么原因啊?
1、已单独建立client的客户端项目,并发布后在服务器上运行。
2、除了以下代码,无其他代码 了。
3、在client项目的afteropenproject事件加入:
QQServer.ServerIp = "0.0.0.0" \'指定IP地址
QQServer.ServerPort = 52177 \'指定登录端口
QQServer.HeartbeatInterval = 30 \'指定心跳时间
QQServer.HeartbeatTimeout = 100 \'指定心跳超时时间
QQServer.PortRange = "25000/30000" \'指定随机端口范围
QQServer.Start() \'启动QQServer
4、其余都是粘贴帮助用OpenQQ实现网络环境下的编号第一例子的代码


[此贴子已经被作者于2018/5/25 11:36:45编辑过]

--  作者:有点甜
--  发布时间:2018/5/25 11:39:00
--  

先去看看qqserver.foxdb、qqclient.foxdb,把例子弄明白了,再做编号

 

http://www.foxtable.com/webhelp/scr/2968.htm

 

http://www.foxtable.com/webhelp/scr/2972.htm

 


--  作者:guosheng
--  发布时间:2018/5/25 14:21:00
--  
设置完客户端和服务器openqq的代码后,客户端登录时出现:已添加了具有相同键的项。是什么原因啊?
.NET Framework 版本:2.0.50727.8762
Foxtable 版本:2018.3.3.1
错误所在事件:启动IMClient
详细错误信息:
已添加了具有相同键的项。

--  作者:有点甜
--  发布时间:2018/5/25 14:26:00
--  

UserLogging事件,改代码

 

For Each dr2 As DataRow In DataTables("user").select("")
    Dim nm As String =  dr2("部门") & "." & dr2("name")
    If nm <> e.UserName Then \'如果不是登录者本人
        If e.Buddies.Contains(nm)= False Then
            e.Buddies.Add(nm)
        End If
    End If
Next