Foxtable(狐表)用户栏目专家坐堂 → 自动编号重复,老师看看怎么回事吧


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

主题:自动编号重复,老师看看怎么回事吧

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


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
自动编号重复,老师看看怎么回事吧  发帖心情 Post By: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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2018/5/24 15:32:00 [只看该作者]

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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2018/5/24 18:24:00 [只看该作者]

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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:896 积分:7535 威望:0 精华:0 注册:2017/12/27 14:19:00
  发帖心情 Post By:2018/5/25 14:21:00 [只看该作者]

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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部
总数 12 1 2 下一页