Foxtable(狐表)用户栏目专家坐堂 → Date.Now自动生成的时间格式是DateTime,根据Date短日期自动生成编号,请问如何让新生编号不会冲突?


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

主题:Date.Now自动生成的时间格式是DateTime,根据Date短日期自动生成编号,请问如何让新生编号不会冲突?

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


加好友 发短信
等级:童狐 帖子:247 积分:1634 威望:0 精华:0 注册:2016/7/20 15:46:00
Date.Now自动生成的时间格式是DateTime,根据Date短日期自动生成编号,请问如何让新生编号不会冲突?  发帖心情 Post By:2017/8/1 11:40:00 [只看该作者]

表中Date.Now自动生成的时间格式是DateTime,忽略时间,只根据Date短日期自动生成编号
请问如何让新生编号不会冲突呢?

此主题相关图片如下:2017-08-01_112433.png
按此在新窗口浏览图片

出库单_DataColChanged

 

If e.DataCol.Name = "部门" Then '如果更改的是身份证号码列

    If e.DataRow.IsNull("部门") Then '身份证号码是否为空

        e.DataRow("出库日期") = Nothing '如果为空,则清除出生日期

    ElseIf e.DataRow("出库单号") = Nothing AndAlso  e.DataRow("出库日期") = Nothing

        '否则从身份证号码列中提取出生日期

        e.DataRow("出库日期") = Date.Now

    End If

End If

If e.DataCol.Name = "出库日期" Then

    If e.DataRow.IsNull("出库日期") Then

        e.DataRow("出库单号") = Nothing

    ElseIf e.DataRow("出库单号") = Nothing Then

        Dim bh As String = Format(e.DataRow("出库日期"),"yyyyMMdd") '取得编号的8位前缀

 

        If e.DataRow("出库单号").StartsWith(bh) = False '如果编号的前8位不符

            Dim max As String

            Dim idx As Integer

            max = e.DataTable.Compute("Max(出库单号)","出库日期 = #" & e.DataRow("出库日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) '取得该天的最大编号

            If max > "" AndAlso max.Length >= bh.Length +3 Then '如果存在最大编号

                idx = CInt(max.Substring(bh.Length+1,3)) + 1 '获得最大编号的后三位顺序号,并加1

            Else

                idx = 1 '否则顺序号等于1

            End If

            e.DataRow("出库单号") = bh & "-" & Format(idx,"000")

        End If

    End If

End If

[此贴子已经被作者于2017/8/1 11:50:07编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/1 12:45:00 [只看该作者]

 

[此贴子已经被作者于2017/8/1 12:46:16编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/1 12:48:00 [只看该作者]

max = e.DataTable.Compute("Max(出库单号)","出库日期 = #" & e.DataRow("出库日期") & "# And [_Identify] <> " & e.DataRow("_Identify")) '取得该天的最大编号

改成

 

max = e.DataTable.Compute("Max(出库单号)","出库单号 like '" & bh & "%' And [_Identify] <> " & e.DataRow("_Identify")) '取得该天的最大编号


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


加好友 发短信
等级:童狐 帖子:247 积分:1634 威望:0 精华:0 注册:2016/7/20 15:46:00
  发帖心情 Post By:2017/8/1 17:40:00 [只看该作者]

谢谢老师,一般情况下是没问题了。

如果删除过订单,就有可能出现以下提示:

.NET Framework 版本:2.0.50727.8669
Foxtable 版本:2017.6.12.1
错误所在事件:
详细错误信息:
未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
请问这种问题应该怎么处理呢?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/1 17:47:00 [只看该作者]

一般表数据是不需要删除的。更不能是频繁删除。

 

如果提示4楼的错误,建议你删除关联设置,重新设置一遍。


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


加好友 发短信
等级:童狐 帖子:247 积分:1634 威望:0 精华:0 注册:2016/7/20 15:46:00
  发帖心情 Post By:2017/8/1 18:37:00 [只看该作者]

重新设置一遍?您是指?

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


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

删除和这个表有关的表关联,然后重新创建

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


加好友 发短信
等级:童狐 帖子:247 积分:1634 威望:0 精华:0 注册:2016/7/20 15:46:00
  发帖心情 Post By:2017/8/1 20:36:00 [只看该作者]

老师,请问这样做的原因是什么呢?

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


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

频繁删除,新增数据,父子表没有进行关联同步的处理,可能会导致关联出错

 回到顶部