是c/s结构的,使用sql ser2000
如何防止多个客户端同时修改aa表中的当前记录?

解决方案 »

  1.   

    可以用事务处理方式 来完成:try
        if not  DataModule1.ADOConnection1.InTransaction then
          DataModule1.ADOConnection1.BeginTrans;
        ConfirmSP.ExecProc;
    HeadQuery.Edit;
        HeadQuery.FieldByName('BILLSTATUS').AsString := '9';
        HeadQuery.Post;
        DataModule1.ADOConnection1.CommitTrans;
        ShowMessage('单据编号为:'+Edit3.Text+'信息确认成功!');
      Except
        if DataModule1.ADOConnection1.InTransaction then
          DataModule1.ADOConnection1.RollbackTrans;
        Exception.Create('单据确认错误,操作被取消!');
      end;
      

  2.   

    Drate(鸟窝里的虫) 您好,感谢您的帮助。
    请问您的这个事务放在哪个控件的什么属性中呢?
    我使用的是ado连接
      

  3.   

    好像不用控制也不会出现这种情况,因为数据库在改动记录时会把数据锁定,这样就不会同时更改了。不用任何代码控制。不过楼上说得也好像有道理。因为ado数据集控件中提供事务独立性这一属性(不是starttansaction,而是一个dataset的属性,决定这个dataset中的数据的独立性。startransaction是保证事务连续性的。)。不知道好不好使。我觉得应该处理的问题不是你要处理的,而是要处理,一条数据被别人更改之后,另外的用户也要修改,但是这时候第二个用户的数据是错误数据,不可能被更改掉(不使用sql更新时的常见错误),这是会出现错误。应该在这个时候处理异常,让用户得到新的数据,在进行更改。