以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 【紧急求助】为什么用“_indentify”做编号为什么还会出现重复? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=48246) |
-- 作者:xvkewen -- 发布时间:2014/3/25 22:08:00 -- 【紧急求助】为什么用“_indentify”做编号为什么还会出现重复? 以下代码是在BeforeSavedatarow事件中,用于自动编号,可为什么还会出现重复现象呢?“_idnetify”不是从不会重复的吗?怎么才能解决?因为系统在公司里运行,实例拿不出来; 对了,补充一下,在单机上操作没有问题,但在网络操作才会出现重复现象,同时使用用户数约150个;一般只会重复两个,偶尔会出现3个;如下图; 此外,我用input.show(currenttable.current("_identify")来验证当前行的编号时发现很多的编号居然与show出来的结果不同;太意外了; BeforeSavedatarow事件全部代码: Dim yh As DataRow = DataTables("User_info").Find("User_Name = \'" & _username & "\'" ) \'获取当前用户信息 e.DataTable.DeleteFor("[Customer] Is Null and [Style_No] is null and [size] is null and [color] is null and [Follow_QA] = \'" & yh("FullName") & "\'") \'删除无效行 Dim dr1 As DataRow = DataTables("scheduling").Find("([排单顺序] Is Null or [Sewing_Team] Is Null or [sample_state] Is Null ) And [Follow_QA] = \'" & yh("FullName") & "\'") \' 找出当前用户出办日期为空,车缝组别,样办状态的办单; Dim i As Integer = Tables("scheduling").Findrow("([排单顺序] Is Null or [Sewing_Team] Is Null or [sample_state] Is Null ) and [Follow_QA] = \'" & yh("FullName") & "\'") \'找出当前用户出办日期为空的办单行的位置; If e.DataRow.RowState <> DataRowState.Added And e.DataRow.RowState <> DataRowState.Modified Then Return End If If dr1 Is Nothing Then \'如果没有找到当前用户出办日期为空的办单,则保存当前排期,并给出新的内部办单号 \'**************************设定办单号为自动编号******************************* If e.DataRow.IsNull("Inside_SRS") Then Dim d As Date = e.DataRow("input_date") 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,"yyMM") \'生成编号的前6位,4位年,2位月. Dim bh1 As String ="BR" & bh If e.DataRow("Inside_SRS").StartsWith(bh) = False \'如果编号的前6位不符 Dim idx As Integer = e.DataRow("_Identify") e.DataRow("Inside_SRS") = bh1 & "-" & Format(idx,"000000") End If End If Else \'否则需要补充【出办日期】与【车缝组别】才能保存,如果【样办状态】为空将会出现无法加载的情况 msgbox("办单号:" & dr1("SRS_No") & ",款号: " & dr1("Style_No") & "的【出办日期】,【样办状态】及【车缝组别】不能为空,请补充完毕后重新保存;") e.Cancel = True Tables("scheduling").Position = i End If |
-- 作者:有点甜 -- 发布时间:2014/3/25 22:16:00 -- 你这样不重复才奇怪,BeforeSavedatarow执行的时候, _Identify还是临时值,保存之后才会生成真正的值。 例如原来99行,两个用户分别增加1行,_Identify都是99(包括BeforeSavedatarow执行时),只有保存之后,一个是99,一个是100。 |
-- 作者:xvkewen -- 发布时间:2014/3/25 22:25:00 -- 那应该怎么办呢?又没有aftersavedatarow事件,难道要放到Aftersaveproject事件中? |
-- 作者:jspta -- 发布时间:2014/3/25 22:46:00 -- 学习网络编号这一章节即可解决。你这种方法只能是单机 |
-- 作者:有点甜 -- 发布时间:2014/3/25 22:51:00 -- 可以自己做个保存按钮,保存前用一个集合收集所有新增行,保存行遍历此集合,逐行生成编码,然后再保存一下。 |
-- 作者:xvkewen -- 发布时间:2014/3/25 22:56:00 -- 用"_identify"列做编号也要这么麻烦吗? |
-- 作者:有点甜 -- 发布时间:2014/3/25 23:06:00 -- 你是在编程哦,这算什么麻烦的:
Dim drs As new List(of DataRow) DataTables.Save() |
-- 作者:xvkewen -- 发布时间:2014/3/25 23:50:00 -- 好吧,就先这样改了。 但有没有更好点办法呢? |
-- 作者:Bin -- 发布时间:2014/3/26 8:28:00 -- 采用帮助的网络编号方式 |
-- 作者:xvkewen -- 发布时间:2014/3/26 11:37:00 -- 我楼上的案例也是用的网络编号中的一种较为简单的做法,只是帮助中没有具体说明怎么使用identity做网络编号?需要注意些什么? |