以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何实现的编号? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177677) |
||||
-- 作者:lgz518 -- 发布时间:2022/5/30 19:22:00 -- 如何实现的编号? 如何实现不中断唯一的编号? 新增一个编号回收表,删除的编号就添加到回收表,新增行的时候,查询回收表有编号就使用,然后删除回收表这个编号,如果回收表是空 的就安装常规方式生成新的编号看上面方法,还是不太理解, 上实例,请老师帮助,谢谢
|
||||
-- 作者:有点蓝 -- 发布时间:2022/5/30 20:51:00 --
|
||||
-- 作者:lgz518 -- 发布时间:2022/6/2 10:00:00 -- 老师,试一下,有以下问题 1,订单编号,用二种方法,新增,都报错,已存在,新增不了,如图一 3.销售编号,新增行,填写日期后,按保存生成编号时,在回收编号找已存编号时,报错如图
|
||||
-- 作者:lgz518 -- 发布时间:2022/6/2 10:00:00 --
|
||||
-- 作者:有点蓝 -- 发布时间:2022/6/2 10:29:00 -- 我只是提供了,使用废号的一个大概处理逻辑。要根据实际情况改到自己的项目里 问题1、出现问题的原因应该是没有及时删除回收表里已经使用的编号,或者回收表里有重复的编号,导致重复使用了。可以再加一个判断,查询一下业务表是否已经使用了这个编号,如果是就删除回收表的这个编号,然后重新查询取一个 问题2、删除行的时候,判断一下编号是否有值,没有的就不需要添加到回收表。如果有编号,也建议也查询回收表判断一下回收表是否已经存在这个删除的编号,如果有就不要重复添加了,避免出现问题1 的情况 问题3、我测试没有问题。应该是使用了重复的编号导致的 最后提醒一下,建议回收表加一个表名列,记录编号是哪个业务表使用的,取废号的时候根据表名取。不可能不同的单据都使用同一种编号。很多时候看别人的代码是要学习别人处理问题的思路和逻辑,而不是就照搬
[此贴子已经被作者于2022/6/2 10:29:40编辑过]
|
||||
-- 作者:lgz518 -- 发布时间:2022/6/6 9:24:00 -- Select e.DataCol.Name Case "日期" If e.DataRow.IsNull("日期") Then e.DataRow("编号") = Nothing Else Dim dr As DataRow = DataTables("回收编号").Find("编号 is not null", "编号") If dr IsNot Nothing Then e.DataRow("编号") = dr("编号") dr.Delete Else Dim d As Date = e.DataRow("日期") 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 = "KK" & Format(d, "yyyyMM") & "-" \'生成编号的前缀 If e.DataRow("编号").StartsWith(bh) = False Then\'如果单据编号前缀不符 Dim max As String Dim idx As Integer Dim flt As String flt = "日期 >= #" & fd & "# And 日期 <= #" & ld & "# And [编号] <> \'" & e.DataRow("编号") & "\'" max = e.DataTable.Compute("Max(编号)", flt) \'取得该月的相同工程代码的最大单据编号 If max > "" Then \'如果存在最大单据编号 idx = CInt(max.Substring(max.Length - 4)) + 1 \'获得最大单据编号的后四位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If e.DataRow("编号") = bh & Format(idx, "0000") End If End If End If Case "编号" If e.NewValue Is Nothing AndAlso e.OldValue IsNot Nothing Then Dim dr1 As DataRow = DataTables("回收编号").Find("表名 is not null", "表名","编号 Is Not null", "编号") \' Dim dr As DataRow = DataTables("回收编号").AddNew \' Dim dr As DataRow = DataTables("回收编号").AddNew dr1 = DataTables("回收编号").AddNew dr1("编号") = e.OldValue End If End Select 老师, 问题一:按您建议在。回收编号,增加“表名”记录删除来源表的表名,执行上面代码,红字部分报错,未知编译错误,改了变量,还报错 问题二:从回收编号取旧编号时,没按当前的编号进行,比如回收编号有回收订单编号和销售编号,当销售编号在订单编号前面时, 新增订单编号时,从回收编号取当前销售编号,不是正确订单编号, 如何从回收取到当前表的相应的编号?要做新增编号时,做判断是否有相应的旧编号和表名,有的话从回收编号取回,没有新增? 如何实现,请老师,帮忙。谢谢 问题三:如何实现的编号是唯一不重复,我在测试发现有重复? |
||||
-- 作者:有点蓝 -- 发布时间:2022/6/6 9:29:00 -- Dim dr1 As DataRow = DataTables("回收编号").Find("表名 =\'xx订单表\' and 编号 =\'" & e.OldValue & "\'") if dr1 is nothing then dr1 = DataTables("回收编号").AddNew dr1("表名") = \'xx订单表\' dr1("编号") = e.OldValue dr1.save end if
[此贴子已经被作者于2022/6/6 9:29:15编辑过]
|
||||
-- 作者:lgz518 -- 发布时间:2022/6/6 9:56:00 -- 老师,执行后,报错如下: 由于将在索引、 主关键字、或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。
|
||||
-- 作者:有点蓝 -- 发布时间:2022/6/6 10:02:00 -- 表名请改为自己正确的表名称。 编号是主键?把表名也作为主键
|
||||
-- 作者:lgz518 -- 发布时间:2022/6/6 10:11:00 --
|