100个人同时申请数据。。。 (200分)

  • 主题发起人 主题发起人 小毛毛
  • 开始时间 开始时间

小毛毛

Unregistered / Unconfirmed
GUEST, unregistred user!
100个用户通过web方式从数据库申请一些原始数据,然后对这些数据进行编辑,
最后提交回数据库(可能保存到另一个表里面)。现在我担心,因为有可能有些人
是同时申请原始数据,也就有可能申请了一样的数据,就是说有人做了无用功,
而且还可能出错,请问该怎样避免这个问题?
 
这样的错误是正常的,不用考虑,如果发生些错误的时候是因为当前的数据已经被
其它用户改变了,提交失败,是数据库正常的现象。不是个错误。
 
你可以在程序中检测到这种错误的,如果发生了这种错误,就把数据原封不动的还回
给用户,再告诉他是什么原因,这样如果他更新的记录中有一条是这样的错误的话,
仍会返回给他,并且让他修正错误,这样就不会因一个错误把所有的输入都浪费了.
(ETC.当然是所有记录更新完成之后再返回了,不然会后面的记录的更新的)
 
我是想尽量避免这种错误,而不是把责任推到用户或者系统身上。

我们的用户每编辑一个信息是有收入的,所以大家都希望尽量能做更多的工作,
也就是说“抢着干活”,如果用户把精力都用在和服务器返回的错误信息纠缠不休,
那最后恐怕开路的不仅仅是用户,还有我这个软件开发者了。

另外,你们说的什么返回错误信息?我不太明白,因为我现在系统设计是通过CGI来
向数据库提交修改,如果一条数据已经被修改,后来的人仍然可以提交修改,反正
最后是执行sql语句嘛,执行一百次都没关系。

忘了说明了,这个系统是基于WEB的。
 
自动生成数据库主键,Update数据库只用Update * WHERE 主键 = 主键
而不要Update * WHERE A = _A AND B = _B将所有字段查找,这样就不会出错了,就是谁
最后提交就是谁的数据,要保留他人的数据,可以写触发器保留。
 
不能“谁提交的就是谁的”,那样岂不是做的最慢的反而工作量“看上去”最多?

也不是想“保留他人的数据”,而是谁编辑了某个纪录,这个记录就属于谁了,
别人不能够在更该。

主键的方法也不行,比如我先“Update * WHERE 主键 = 主键”了,后来的一个比我
慢的人同样可以“Update * WHERE 主键 = 主键”,且不管我和他提交的数据是否都
正确,----问题是我岂不是白做了?我的工作量体现在哪里呢?
 
-->也不是想“保留他人的数据”,而是谁编辑了某个纪录,这个记录就属于谁了,
别人不能够在更该。

给出个判断字段,就像会计凭证一样,审核过的记录不准修改,这样不就行了。
 
这样的错误是一定有的麻!
 
这个问题简单,呵呵。
在表中设置一个STATE,该STATE有二个状态可修改态和不可修改态。
当用户申请时给用户可修改态的数据,然后改状态。用户提交后改回状态即可
 
记录加锁啊
用户要求修改某条记录时,执行
select * from T where ID=IDValue for update nowait
(Oracle)
如果已经有用户在修改这条记录,就会引发一个意外
 
每条记录(被其它用户更改过的)都有OldValue,NewValue,CurrentValue。在
ClientDataSet的ReconcileError中完全可以把错误呈现给用户,让用户自己来处理。
 
没有主关键字就没有问题,不过千万不要以为用lock的方法来阻止别人同时输入,这种情况
很容易弄死自己的系统
 
多人接受答案了。
 
后退
顶部