1在多用户同时操作的情况如何控制信息.
如某单据选择调用另外一张单据,被选择单据有个状态是否被其他单据选用,选用之后立即关闭.
如两个客户端同时选用了同一张单据.在程序中如何控制,才不致使脏读.
还有其他如单据号码更新的问题等等.
请大家提提自己的想法?

解决方案 »

  1.   

    第一种情况不就是悲观锁定的问题吗? 
    adLockPessimistic
    如果设置为此类锁定,你可以用悲观锁定制式编辑记录,这就是说,记录被锁定,且只有在编辑开始到将记录更新的提交给数据提供者这段时间内进行编辑的用户才可以访问   不知道你的单据号码更新业务规则是什么。 不好说
      

  2.   

    我同意fredlin(fred)的做法。个人认为这种做法最好。
      

  3.   

    你也可以在数据库表中添加一个LockStatus状态字段,需要锁定时设置为1,其他程序访问时先访问该字段。
      

  4.   

    照 fredlin(fred)的思路这样的话在很多用户操作的情况下,会把系统资源锁死。导致很多资源不可用。这样的话就是说我在一张单据被另外一张单据选用时,其他单据就不能被先用。
    单据号码是在保存后更新怎样处理比较好,锁定的话也不是一个办法。可以在保存时自动更改单据的号码,不知道大家还有什么好的方法。在线等候
      

  5.   

    dim cnn as ADODB.Connection
    dim lUpdate as longcnn.Exec "UPDATE 单据 SET 选用标志 = 1 WHERE 单据号='...' AND 选用标志 = 0",lUpdate, adCmdTextIf lUpdate = 1 Then
      选用成功
    Else 'lUpdate = 0
      已经被他人选用
    End If
      

  6.   

    其实,目前大多数的数据库都提供并发控制
    一般情况下,不回出现楼主所说的问题
    如果是比较低级的数据库,比如vfp数据库,它提供锁记录方式
    在很多情况下都可以解决并发的问题
      

  7.   

    Tiger_Zhao(TigerZhao(VB老鸟)) 用你的办法,可以控制多个用户同时读一张单据。也解决了数据并发的问题。在多行的情况下,返回会怎样。
    对于单据的编号也可能采取同样的方法,也有另外一种就是自动把单据号码改掉,另外一种是手工。如果单据号码不允许修改的话,采用自动把单据改掉的方法比较好,这样不致于单据白录。对于选单的话是不是已经被其他单据选用时,不能被另外单据选用好一点,请大家谈谈看看。
    在线等候
      

  8.   

    在修改前先Lock住該記錄,修改後再UnLock記錄,這樣每次只能一個人修改。
    rs.open "Select * from TableName with(RowLock, UpdLock, ReadPast) where id=xxx"
    if not rs.eof then
    沒人Lock住
    else
    有人Lock住
    endifset rs=nothing即可Unlock記錄
      

  9.   

    2004kingbear() 
    >Tiger_Zhao(TigerZhao(VB老鸟)) 用你的办法,可以控制多个用户同时读一张单据。也解决了数据并发的问题。在多行的情况下,返回会怎样。如果你的多行记录之间是松散的关系,那就分别一条条保存,在界面上将保存不成功的行标记出来。
    如果记录之间有关联,可以用事务(Connection.BeginTrans),只要有一条不成功就回滚(Connection.Rollback)>对于单据的编号也可能采取同样的方法,也有另外一种就是自动把单据号码改掉,另外一种是手工。如果单据号码不允许修改的话,采用自动把单据改掉的方法比较好,这样不致于单据白录。归根到底是业务的问题。我不认为会存在单据白录的问题。
    如果用户是按照实物单据进行录入,就不可能发生两个客户端同时录入相同有单据号的单据。如果用户喜欢在两台机器上做变态的操作,我们也只要用简单的覆盖方式就可以了。
    如果单据号完全由程序自动生成,那么在两个客户端输入的单据完全是不同的数据,毫无关联。