Foxtable(狐表)用户栏目专家坐堂 → 关于用哪种类型的ID的问题


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

主题:关于用哪种类型的ID的问题

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


加好友 发短信
等级:五尾狐 帖子:1131 积分:8199 威望:0 精华:0 注册:2013/11/3 19:00:00
关于用哪种类型的ID的问题  发帖心情 Post By:2016/9/27 13:37:00 [只看该作者]

关于在网络状态下生成不重复ID的解决办法,现在知道的方法有:
1、用OPENQQ(这个还在学习中,而且有时候怕是用不到)
2、自增列(有时要将自增ID用做和其他表关联时,会出现保存后变化的情况,且听说数据迁移时很麻烦)
3、GUID(这个还不太明白)

现在是要生成有一定格式的编号,比如:出库 CK-001,002.……
这样的编号除了OPENQQ外还有什么方法在网络状态且多并发的情况下生成不重复编号吗?谢谢!

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


加好友 发短信
等级:五尾狐 帖子:1131 积分:8199 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2016/9/27 13:40:00 [只看该作者]

自己照帮助改了个内部函数,但听有点蓝版主说会有重复编号
Dim getbh As String  'return 编号,pf 是前缀
Dim nm As String=Args(0)  '读参数1,表名
Dim pf As String=Args(1)
Dim bhformat As String = Args(2)
Dim cmd1 As New SQLCommand
Dim cmd2 As New SQLCommand
Dim Key As Integer
cmd1.ConnectionName = DataSource '设置数据源名称
cmd2.ConnectionName = DataSource
cmd1.commandText = "Select Count(*) F rom [getnumberid] Where [前缀] = '" & pf & "' And 表名 = '" & nm & "'"
If cmd1.ExecuteScalar = 0 Then '如果编号表不存在前缀的行,那么增加一行
    cmd1.commandtext = "Inser t Into getnumberid (表名, 前缀, 顺序号) Values('" & nm & "','" & pf & "',1)"
    cmd1.ExecuteNonQuery
End If
cmd1.commandText = "Select [顺序号] F rom [getnumberid] Where [前缀] = '" & pf & "' And 表名 = '" & nm & "'"
Do
    Key = cmd1.ExecuteScalar() '从后台获得顺序号
    cmd2.commandText = "U pdate [getnumberid] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = '" & pf & "' And 表名 = '" & nm & "'"
    If cmd2.ExecuteNonQuery() > 0 Then '更新顺序号
        Exit Do '更新成功则退出循环
    End If
Loop
getbh = pf & "-" & Format(Key,bhformat)
Return getbh

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


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

2楼的方式可行,一般不会有问题,http://www.foxtable.com/webhelp/scr/1994.htm

sqlserver也可以设置为存储过程,减少几条sql执行的时间差,如
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=61811
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=61848


 回到顶部