Foxtable(狐表)用户栏目专家坐堂 → 自动增加的市场订单号怎么能让它保持唯一性?


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

主题:自动增加的市场订单号怎么能让它保持唯一性?

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


加好友 发短信
等级:二尾狐 帖子:584 积分:3816 威望:0 精华:0 注册:2012/10/15 20:39:00
自动增加的市场订单号怎么能让它保持唯一性?  发帖心情 Post By:2014/2/25 12:59:00 [只看该作者]

我新做了市场的订单号,一点新增订单按键,就会按照日期,然后递增的出现订单号,代码如下:


    Dim r As Row =Tables("市场").AddNew()
    Dim max As String
    max = DataTables("市场").Compute("Max(市场单号)","下单日期 = #" & Date.Today & "#")
    If max = "" Then
        max=Format(Date.Today,"yyyyMMdd") & "001"
    Else
        max = Format(Date.Today,"yyyyMMdd")  & CStr(Val(Right(max,3)) + 1).PadLeft(3,"0")
    End If
    r("市场单号") =max


但是我发现,不知道怎么搞得(或许是多人在操作的原因),有时候出现了就会重复的订单号,如 两个 20140225002
我想保持这个订单号自动产生,不重复,保持唯一性,该如何改写代码?
[此贴子已经被作者于2014-2-25 13:02:04编辑过]

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/2/25 13:10:00 [只看该作者]

http://www.foxtable.com/help/topics/1994.htm

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/2/25 13:12:00 [只看该作者]

还可以试试,看能不能改善:

Dim r As Row =Tables("市场").AddNew()

    Dim max As String
    max = DataTables("市场").SQLCompute("Max(市场单号)","下单日期 = #" & Date.Today & "#")
    If max = "" Then
        max=Format(Date.Today,"yyyyMMdd") & "001"
    Else
        max = Format(Date.Today,"yyyyMMdd")  & CStr(Val(Right(max,3)) + 1).PadLeft(3,"0")
    End If
    r("市场单号") =max

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


加好友 发短信
等级:童狐 帖子:200 积分:1380 威望:0 精华:0 注册:2013/11/6 17:35:00
  发帖心情 Post By:2014/2/25 13:23:00 [只看该作者]

把代码写在beforesave事件里

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


加好友 发短信
等级:二尾狐 帖子:584 积分:3816 威望:0 精华:0 注册:2012/10/15 20:39:00
  发帖心情 Post By:2014/2/25 13:47:00 [只看该作者]

比如现在编号是 002,那么假如两台电脑同时在操作新增订单的话,会不会都是003?
[此贴子已经被作者于2014-2-25 13:47:24编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/2/25 14:04:00 [只看该作者]


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


加好友 发短信
等级:二尾狐 帖子:584 积分:3816 威望:0 精华:0 注册:2012/10/15 20:39:00
  发帖心情 Post By:2014/2/25 23:03:00 [只看该作者]

我觉得把几分几秒 时间编在 订单号 里面最好,涉及到秒,一般不会有重复的了

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


加好友 发短信
等级:二尾狐 帖子:584 积分:3816 威望:0 精华:0 注册:2012/10/15 20:39:00
  发帖心情 Post By:2014/2/26 0:01:00 [只看该作者]

我把时间和秒增加进去了,不在同一秒出现的点击,最后一个数字还在跟着 +1,这是为什么呢?

Dim r As Row =Tables("市场").Current
Dim max As String
max = DataTables("市场").Compute("Max(市场单号)","下单日期 = #" & Date.Today  & "#")
If max = "" Then
    max=Format(Date.Now,"yyMMddhhmmss") & "1"
Else
    max = Format(Date.Now,"yyMMddhhmmss") & CStr(Val(Right(max,1)) + 1)                 '''.PadLeft(1,"0")
End If
r("市场单号") =max

---------------------------------------------------
想要的效果:
不在同一秒点击出现的应该是:如:1402260301221  ,1402260302361 ,... ...    最后一个数字一定要是1,就是说,在这一秒,这是新增的这一秒的第1个订单
在同一秒点击出现的应该是:   如:1402260301221  ,1402260301222 ,... ...    就是说在这一秒,这是新增的这一秒的第1个/第2个订单
[此贴子已经被作者于2014-2-26 0:07:08编辑过]

 回到顶部