Foxtable(狐表)用户栏目专家坐堂 → 编号重复


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

主题:编号重复

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
编号重复  发帖心情 Post By:2021/8/31 9:37:00 [显示全部帖子]

老师,我有一个表的编号代码如下,偶尔会出现重复,一直没找到问题所在,请老师看看哪儿有问题,代码在录入窗口的保存按钮中,其他窗口也是类似的编号但没有这样的情况。

Dim r As Row = Tables("报名登记表") .Current
If r("登记状态") = True Then
    MessageBox.Show("你已提交登记,如需修改,请联系管理员打回!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
Else
    If r.IsNull("项目编码") Then
        r("登记状态") = True
        r("登记人") = _UserXingMing
        r("ID") = Guid.NewGuid.TOstring()
        r("登记日期") = Date.Now
        Dim d As Date = r("登记日期")
        Dim y As Integer = d.Year
        Dim m As Integer = d.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(d,"yyyyMM") '生成编号的前6位,4位年,2位月.
        If r("项目编码").StartsWith(bh) = False '如果编号的前6位不符
            Dim max As String
            Dim idx As Integer
            max = DataTables("报名登记表").SQLCompute("Max(项目编码)","登记日期 >= '" & fd & "' And 登记日期 <= '" & ld & "' And [_Identify] <> " & r("_Identify")) '取得该月的最大编号
            If  max > "" Then '如果存在最大编号
                idx = CInt(max.Substring(7,3)) + 1  '获得最大编号的后三位顺序号,并加1
            Else
                idx = 1 '否则顺序号等于1
            End  If
            r("项目编码") = bh & "-" & Format(idx,"000")
            r.save
        End If
    Else
        r("登记状态") = True
        r("登记人") =  _UserXingMing
        r("登记日期") = Date.Now
        r.save
    End If
End If
e.Form.Close()


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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/8/31 9:51:00 [显示全部帖子]

并发不大啊,我另外的表数据更多,并发更大,重来没出现重复过。

1、就这个表,同一个人录入时,连续两条都会重复;

2、不同的人录入时间虽然在同一天,但是时间间隔很大,也会出现重复;

就一直没找到问题所在。

 

[此贴子已经被作者于2021/8/31 9:54:25编辑过]

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/8/31 10:25:00 [显示全部帖子]

窗口录入保存后都会关闭窗口,新增才会又从新打开录入窗口,没有保存成功的话,窗口应该不会关闭啊,我核实过,登记日期都是长时间格式,时间间隔都没有挨很近的情况。


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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/8/31 13:32:00 [显示全部帖子]

感觉这句代码是不是有bug,我用这句代码出来的最大编号是30号的最大编号,不是今天的最大编号

max = DataTables("报名登记表").SQLCompute("Max(项目编码)","登记日期 >= '" & fd & "' And 登记日期 <= '" & ld & "' And [_Identify] <> " & r("_Identify")) '取得该月的最大编号

改为这样就正常了:

max = DataTables("报名登记表").SQLCompute("Max(项目编码)","登记日期 >= '" & fd & "' And 登记日期 <= '" & ld.adddays(1)  & "' And [_Identify] <> " & r("_Identify")) '取得该月的最大编号

红色位置不对

但是ld出来确实又是2021-08-31,搞不懂了

[此贴子已经被作者于2021/8/31 13:34:09编辑过]

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


加好友 发短信
等级:狐精 帖子:3150 积分:20981 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/8/31 13:59:00 [显示全部帖子]

,是的,登记日期有时分秒,我修改了试试用一段时间看看会不会有问题,谢谢老师!
[此贴子已经被作者于2021/8/31 14:00:12编辑过]

 回到顶部