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


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

主题:自动编码重号

美女呀,离线,留言给我吧!
nuoyan89
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:489 积分:3392 威望:0 精华:0 注册:2020/10/9 8:45:00
自动编码重号  发帖心情 Post By:2022/1/12 20:27:00 [只看该作者]

老师,如图1,我在表事件中写了以下代码,也写了自动保存,但是怎么还会有重号的呢?分析了一下,应该是我点击之后相关的编码没有自动保存到后台数据中占位置,导致同时编辑的两个电脑生成了同一编码,会不会是因为我写了只有满足条件才能保存的缘故呢?
表事件代码:
If e.DataCol.Name = "上报日期"  Then
    If e.DataRow.IsNull("上报日期")  Then
        e.DataRow("单据编码") = Nothing
    Else
        e.DataRow.save
        Dim bh As String  =  Format(e.DataRow("上报日期"),"yyMMdd")  ' 取得编号的8位前缀
        If e.DataRow("单据编码").StartsWith(bh) = False '如果编号的前8位不符
            Dim dt2 As DataTable = DataTables("生产异常停机")
            Dim max As String
            Dim idx As Integer
            max = e.DataTable.SQLCompute("Max(单据编码)","单据编码 like '" & "GCJL"& bh & "%' And [_Identify] <> " & e.DataRow("_Identify")) '取得该天的最大编号
            If max > "" Then '如果存在最大编号
                idx = CInt(max.Substring(10,3)) + 1 '获得最大编号的后三位顺序号,并加1
            Else
                idx = 1 '否则顺序号等于1
            End If
            e.DataRow("单据编码") = "GCJL"& bh  & Format(idx,"000")
            e.DataRow.save
        End If
    End If
End If
保存按钮代码:
If Tables("生产过程记录_生产过程记录").Current("上报类型") = "其他异常" Then
    For Each r As Row In Tables("生产过程记录_生产过程记录").rows
        Dim cls() As String ={"上报类型","成品编码","异常类型","上报类型","异常过程描述","处理部门","需审核人","是否停机","班次","重要程度"}
        For Each c As String In cls
            If r.isnull(c) Then
                msgbox(c & "信息请填写完整,不能有为空信息")
                Return
            End If
        Next
    Next
    For Each dr1 As DataRow In DataTables("生产过程记录_生产过程记录").DataRows
        Dim dr As DataRow = DataTables("生产过程记录_审核过程").AddNew()
        dr("年") = Format(Date.Today,"yyyy")
        dr("月") = Format(Date.Today,"yyyyMM")
        dr("审核单据编码") = dr1("单据编码")
        dr("单据内容") = dr1("录入人员")
        dr("审核状态") = "已审核"
        dr("流程名称") = "生产异常"
        dr("创建人员") = _UserName
        dr("创建日期") = Date.Now
        dr("流程编码") = "无"
        dr("审核人员") = _UserName
        dr("审核意见") = "提交申请"
        dr("审核结果") = "提交申请"
        dr("审核过程") = "提交申请"
        dr("处理人员") = _UserName
        dr("处理日期") = Date.Today
    Next
    For Each dr2 As DataRow In DataTables("生产过程记录_生产过程记录").DataRows
        Dim r1 As DataRow = DataTables("生产过程记录_审核过程").AddNew()
        r1("年") = Format(Date.Today,"yyyy")
        r1("月") = Format(Date.Today,"yyyyMM")
        r1("审核单据编码") = dr2("单据编码")
        r1("单据内容") = dr2("录入人员")
        r1("审核状态") = "待审核"
        r1("流程名称") = "生产异常"
        r1("创建人员") = _UserName
        r1("创建日期") = Date.Now
        r1("流程编码") = "无"
        r1("审核人员") = dr2("需审核人")
    Next
    DataTables("生产过程记录_生产过程记录").DeleteFor("异常过程描述 is null")
    DataTables("生产过程记录_生产过程记录").Save()
    
    DataTables("生产过程记录_审核过程").DeleteFor("审核单据编码 is null")
    DataTables("生产过程记录_审核过程").Save()
    
    DataTables("生产过程记录_生产过程记录").RemoveFor("")
    DataTables("生产过程记录_审核过程").RemoveFor("")
    e.Form.Close
End If

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109503 积分:557183 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/1/13 8:43:00 [只看该作者]

如果是多人使用系统,并发的情况下,这种用法是没有办法控制不重号的。

比较合理的就是有个统一生成编号的地方,比如服务端程序,如:http://www.foxtable.com/webhelp/topics/3008.htm

 回到顶部
美女呀,离线,留言给我吧!
nuoyan89
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:489 积分:3392 威望:0 精华:0 注册:2020/10/9 8:45:00
  发帖心情 Post By:2022/1/13 9:47:00 [只看该作者]

不是有一种方法吗?就是我打开这个表时,先自动保存到后台,相当于占号一样的,然后所以信息填写完成在保存这样可以操作吗?

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

只要是并发,不通过服务端统一控制的,都没有办法不重号

 回到顶部