Foxtable(狐表)用户栏目专家坐堂 → 如何实现的编号?


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

主题:如何实现的编号?

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


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
如何实现的编号?  发帖心情 Post By:2022/5/30 19:22:00 [只看该作者]

如何实现不中断唯一的编号?
新增一个编号回收表,删除的编号就添加到回收表,新增行的时候,查询回收表有编号就使用,然后删除回收表这个编号,如果回收表是空 的就安装常规方式生成新的编号
看上面方法,还是不太理解,
上实例,请老师帮助,谢谢
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:编号问题.zip



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


加好友 发短信
等级:超级版主 帖子:110669 积分:563259 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/30 20:51:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:编号问题.zip


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


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/6/2 10:00:00 [只看该作者]

老师,试一下,有以下问题
1,订单编号,用二种方法,新增,都报错,已存在,新增不了,如图一

图片点击可在新窗口打开查看此主题相关图片如下:编号报错-1.jpg
图片点击可在新窗口打开查看
2,删除,订单表或销售表的空行,回收编号表会产生空编号

图片点击可在新窗口打开查看此主题相关图片如下:编号报错-2.jpg
图片点击可在新窗口打开查看
3.销售编号,新增行,填写日期后,按保存生成编号时,在回收编号找已存编号时,报错如图

图片点击可在新窗口打开查看此主题相关图片如下:编号报销-3.jpg
图片点击可在新窗口打开查看



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


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/6/2 10:00:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:编号问题-1.zip


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


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

我只是提供了,使用废号的一个大概处理逻辑。要根据实际情况改到自己的项目里

问题1、出现问题的原因应该是没有及时删除回收表里已经使用的编号,或者回收表里有重复的编号,导致重复使用了。可以再加一个判断,查询一下业务表是否已经使用了这个编号,如果是就删除回收表的这个编号,然后重新查询取一个

问题2、删除行的时候,判断一下编号是否有值,没有的就不需要添加到回收表。如果有编号,也建议也查询回收表判断一下回收表是否已经存在这个删除的编号,如果有就不要重复添加了,避免出现问题1 的情况

问题3、我测试没有问题。应该是使用了重复的编号导致的

最后提醒一下,建议回收表加一个表名列,记录编号是哪个业务表使用的,取废号的时候根据表名取。不可能不同的单据都使用同一种编号。很多时候看别人的代码是要学习别人处理问题的思路和逻辑,而不是就照搬
[此贴子已经被作者于2022/6/2 10:29:40编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By: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

老师,
问题一:按您建议在。回收编号,增加“表名”记录删除来源表的表名,执行上面代码,红字部分报错,未知编译错误,改了变量,还报错
问题二:从回收编号取旧编号时,没按当前的编号进行,比如回收编号有回收订单编号和销售编号,当销售编号在订单编号前面时,
            新增订单编号时,从回收编号取当前销售编号,不是正确订单编号,
           如何从回收取到当前表的相应的编号?要做新增编号时,做判断是否有相应的旧编号和表名,有的话从回收编号取回,没有新增?
 如何实现,请老师,帮忙。谢谢
问题三:如何实现的编号是唯一不重复,我在测试发现有重复?


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


加好友 发短信
等级:超级版主 帖子:110669 积分:563259 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/6/6 9:56:00 [只看该作者]

老师,执行后,报错如下:
由于将在索引、 主关键字、或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。

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


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

表名请改为自己正确的表名称。

编号是主键?把表名也作为主键

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


加好友 发短信
等级:六尾狐 帖子:1257 积分:8555 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2022/6/6 10:11:00 [只看该作者]

表名请改为自己正确的表名称。查看过表名是正确。

编号是主键?把表名也作为主键,您 说是把回收编号表的编号是主键,改为表名列做主键?回收编号表是ACCESS在狐表上建立表,没设定主键

 回到顶部
总数 18 1 2 下一页