以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  互联网上如何禁止重号  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=32321)

--  作者:lihe60
--  发布时间:2013/4/29 12:51:00
--  互联网上如何禁止重号

给一个新增的行赋一个值,使用下面的代码

dim r as row =currenttable.addnew()

cmd.c

cmd.commandtext="select count(_identify) from {表A}

r("行号")=cmd.ExecuteScalar()+1

r.datarow.save()

这个代码看起来是没有问题。

 

如果两个用户同时(即0.00000001秒都不差)执行这段代码,就会产生重号,假设执行

cmd.commandtext="select count(_identify) from {表A}

r("行号")=cmd.ExecuteScalar()+1

需要0.00001秒,就会新增的两行都是同一个号码。

 

 

说明一下,这个行号是自动生成的,不是手工录入的。

 

[此贴子已经被作者于2013-4-30 5:47:03编辑过]

--  作者:qq121454970
--  发布时间:2013/4/29 12:54:00
--  

顶顶,呵呵

[此贴子已经被作者于2013-4-29 12:55:04编辑过]

--  作者:don
--  发布时间:2013/4/29 13:11:00
--  
看看帮助再说
--  作者:lihe60
--  发布时间:2013/4/29 13:14:00
--  
以下是引用don在2013-4-29 13:11:00的发言:
看看帮助再说

刚才表述不全:

说明一下,这个行号是自动生成的,不是手工录入的。

 

手工录入是可以防止重复值的,自动生成可能会重复。

[此贴子已经被作者于2013-4-29 13:15:57编辑过]

--  作者:blackzhu
--  发布时间:2013/4/29 13:46:00
--  
呵呵 我觉得你这个代码不重复才怪.
--  作者:zerov
--  发布时间:2013/4/29 14:27:00
--  
太高深了,佩服!
--  作者:lihe60
--  发布时间:2013/4/30 5:50:00
--  

假设完成下面这段代码需要10秒中(需要上是远远不会有这么长),一个用户第1秒执行这段代码,另一个用户第三秒执行这段代码,这样会出现两个新增的行,行号是一样的。

dim r as row =currenttable.addnew()

cmd.c

cmd.commandtext="select count(_identify) from {表A}

r("行号")=cmd.ExecuteScalar()+1

r.datarow.save()


--  作者:jspta
--  发布时间:2013/4/30 9:55:00
--  
你没有判断你获得这个值的时候,并在你更新时,是否已经被人更新了。还是看下复杂网络下的不重复编号的。这个必须学习的
--  作者:lihe60
--  发布时间:2013/4/30 12:10:00
--  
以下是引用jspta在2013-4-30 9:55:00的发言:
你没有判断你获得这个值的时候,并在你更新时,是否已经被人更新了。还是看下复杂网络下的不重复编号的。这个必须学习的

dim r as row =currenttable.addnew()

cmd.c

cmd.commandtext="select count(_identify) from {表A}

r("行号")=cmd.ExecuteScalar()+1

r.datarow.save()

 

 

你认为这段代码会有什么问题?


--  作者:jspta
--  发布时间:2013/4/30 21:55:00
--  
以下是引用lihe60在2013-4-30 12:10:00的发言:

dim r as row =currenttable.addnew()

cmd.c

cmd.commandtext="select count(_identify) from {表A}

r("行号")=cmd.ExecuteScalar()+1    同时执行是可能存在这个问题,即使几率很低,如果有几十个人在操作出现这种问题几率就会变大,如果网络不好造成延迟,那重号几率就更大了。

r.datarow.save()

 

 

你认为这段代码会有什么问题?


你自己都说了,同时执行的时候就会出现问题