环境:delphi XE7 +SQL 2008
问题:关于delphi数据库多用户操作问题问题描述:
   delphi使用控件:TADOConnection + TADOQuery + TDataSource + cxgrid + cxdbedit
   ADOQuery.LockType:=adLockOptimistic;每次只能对一条记录进行“增删改”;增/改的过程:    单击按钮“新增”
    dm.ADOConnection1.BeginTrans;
    with dm.ADOQuery1 do
    begin
      open;
      Edit;
      append;
    end;
    
   ----------需要一段时间来输入----------
    等待用户在界面上更改数据,使用的是数据绑定控件:cxdbedit    
    单击按钮“保存”
    dm.ADOQurry1.post;
    dm.ADOConnection1.CommitTrans;
     
问题:由于多用户同时操作,且该过程话费时间比价久;
      致使记录A提交数据库的时候“记录已经被更改” ,导致数据保存失败。
      尤其用户多的情况下。      若使用 ADOQuery.LockType:=adLockPessimistic ;
      致使更改数据的时候,别的用户无法使用访问该数据,其他用户等待时间过长
 
      多用户系统,更新字段,该用哪种方法比较合适? 

解决方案 »

  1.   

    你是通过ADOQuery.LockType:=adLockOptimistic查找数据行,相应的数据集只有一条(行),
    当然只能对一条进行增删改了。
      

  2.   

    最好是三层结构,在应用服务器端操作数据库。
    或者是执行SQL语句,“update table set 。”, 让数据库自己决定谁来更改。
      

  3.   

    我都不用ado 我都用dbexpress来访问数据库
      

  4.   

    写法有问题应该使用tclientdataset,提交其delta保存,不能直接打开数据表,同时打开事务,严重不能这样操作。
      

  5.   

    用多用户的话最好还是INSERT+UPDATE,不建议使用其他技巧了,不然随着数据量越大,发生错误的机率越大
      

  6.   

    建议使用DataSnap三层。这样,服务器的数据,各用户,可以随时读取数据。当别人修改后。其它用户,读取的就是新的数据。