我不是很清楚你的想法,不过对于加锁问题,我们一般都加上一个布尔型的IsLocked字段,只有IsLocked为False情况才能编辑,编辑时改为True,编辑完后再改为False。

解决方案 »

  1.   

    在数据库中加入一个标志位,这个标志位就是读取标志位,在读取这条记录时,将这个标志位置1,这样别的终端读的时候加入where条件 标志位=0 ,这样就可以了。不会同时读取同一条记录的。另外Oracle中好像有一种锁专门干这个的,但是我不记得了,你可以找资料看看。
      

  2.   

          或许可以,但
          你的意思是想实现A修改完后B又在A修改后的基础上修改吗?
      

  3.   

    一般这种情况的处理都要放在存储过程中,并返回一个处理结果(最简单的是一个BOOL值),同时在存储过程中还要使用到事务处理,这样,只能有一个人被处理成功,第二个人是不会被受理的。
      

  4.   

    TO:donotbesilent(惊叹不已) 引用:你的意思是想实现A修改完后B又在A修改后的基础上修改吗?
    其实这就看系统是否需要了,如果是售票系统我想还应当有一个售出标志位的
    表结构增加两个个标志位(两个字段):一个是读取字段,一个是售出字段。
    读取的时候的where语句:where 读取字段=未被读取 and 售出字段=未售出
    就可以了!!
    我个人对数据库的认识就是数据和标志位。增加一个功能就增加一个标志位。
      

  5.   

    zhang_xw(未来帅哥) chsl918(二雷):加上一个判断字段是可以,但有一些问题,效率低而且容易出错,假如一个终端异常退出,标志位没有恢复,那也会出错.
    songyangk(小草):两个机子都有修改过程,就是都得等用户输入,所以不能用存储过程.
      

  6.   

    TO:wfzn()
    那不是正好吗?正好各有3张啊!!
    我需要补充一点就是加入标志位的时间,在读取的时候需要一条一条读取,每读取一条需要为这一条加上标志位,如果没有加上标志位就说明没有读取。
    实现是先作一个读取循环,再进行按条置标志位楼上说的安全问题确实值得注意,解决方式是建立一个手工清除标志位的模块,这个模块将所有已经置读取标志位而没有卖出票的记录都读取出来由人工去挑选清除标志位,可能你会觉得这样增加应用工作量,但是我想这个毕竟是及其少数的情况所以应用工作量不会增加多少的,而且这个工作可以在没有人售票的情况下完成,(比如下班之后干脆所有都清除就可以了!)