多客户端版软件中 当多个客户端同时开户时,怎样避免生成的用户编号重复
以下是客户端新开户时,生成新的用户编号的代码,大家有什么建议。
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的用户?
怎么办呢,谢谢大家?
------解决思路----------------------
这不是最明显的同步用例嘛
------解决思路----------------------
大部分数据库都有自动生成ID的功能,这样插入数据库一行时就不需要指定ID列了,而且保证不会重复。
如果一定要自己生成,可以用GUID来表示ID,也可以保证不会重复。
如果一定要用整数,可以在操作时锁定表。
------解决思路----------------------
把数据库的用户编号列设置成“自动编号”,在插入数据库记录时 INSERT INTO XX表(用户编号,xx...) values (...)改为INSERT INTO XX表(xx...) values (...),数据库会自动给用户编号赋值。