以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 自动编码重号 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=174380) |
-- 作者:nuoyan89 -- 发布时间: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 |
-- 作者:有点蓝 -- 发布时间:2022/1/13 8:43:00 -- 如果是多人使用系统,并发的情况下,这种用法是没有办法控制不重号的。 比较合理的就是有个统一生成编号的地方,比如服务端程序,如:http://www.foxtable.com/webhelp/topics/3008.htm
|
-- 作者:nuoyan89 -- 发布时间:2022/1/13 9:47:00 -- 不是有一种方法吗?就是我打开这个表时,先自动保存到后台,相当于占号一样的,然后所以信息填写完成在保存这样可以操作吗? |
-- 作者:有点蓝 -- 发布时间:2022/1/13 9:49:00 -- 只要是并发,不通过服务端统一控制的,都没有办法不重号 |