以文本方式查看主题 - 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()
你认为这段代码会有什么问题? 你自己都说了,同时执行的时候就会出现问题 |