Code Bye

多客户端版软件中 当多个客户端同时开户时,怎样避免生成的用户编号重复

 

多客户端版软件中  当多个客户端同时开户时,怎样避免生成的用户编号重复
以下是客户端新开户时,生成新的用户编号的代码,大家有什么建议。
    Dim RsJL As New AdoDB.Recordset,sql as string 

   sql = ” select max(用户编号) as  最大编号  from yhxx   ”
   RsJL.Open sql, Conn, adOpenKeyset, adLockPessimistic
   
   If RsJL.RecordCount = 0 Then
            BH = 1  
  Else
           If IsNull(RsJL.Fields(“最大编号”)) = True Then
                  BH = 1
           Else
                 BH = RsJL.Fields(“最大编号”) + 1
           End If
   End If
如果三个客户端软件同时开户,同时通过以上代码得到了一个编号为1,那保存后岂不是有3个编号为1的用户?

怎么办呢,谢谢大家?  


30分
这不是最明显的同步用例嘛

30分
大部分数据库都有自动生成ID的功能,这样插入数据库一行时就不需要指定ID列了,而且保证不会重复。
如果一定要自己生成,可以用GUID来表示ID,也可以保证不会重复。
如果一定要用整数,可以在操作时锁定表。
引用 1 楼 huxiweng 的回复:

这不是最明显的同步用例嘛

非常感谢,有没有相关的代码,可供参考。

引用 2 楼 loneking2001 的回复:

大部分数据库都有自动生成ID的功能,这样插入数据库一行时就不需要指定ID列了,而且保证不会重复。
如果一定要自己生成,可以用GUID来表示ID,也可以保证不会重复。
如果一定要用整数,可以在操作时锁定表。

非常感谢,有没有相关代码,好参照一下。


40分
把数据库的用户编号列设置成“自动编号”,在插入数据库记录时 INSERT INTO XX表(用户编号,xx…) values (…)改为INSERT INTO XX表(xx…) values (…),数据库会自动给用户编号赋值。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明多客户端版软件中 当多个客户端同时开户时,怎样避免生成的用户编号重复