我用Delphi6开发C/S架构的系统时,涉及到了多表更新,
在数据模块上放置了三个控件:ADOConn:TADOConnection,qryMain:TADOQuery,qryDetail:TADOQuery
qryMain的数据用TDBEdit显示,qryDetail的数据用TDBGrid显示,
在进行新增或修改时,启动了一个事务:
ADOConn.BeginTrans;
当修改完毕后,提交事务:
ADOConn.CommitTrans;
现在的问题是:
当我提交事务后,刷新数据集,则刚才的新增或修改均丢失,请问这里可能的原因是什么?我搞了半天,还没找出来。
(以前我用过事务处理,均是独立的TADOQuery在后台处理,没有与数据显示控件相关联)
下面是ADOConn的属性设置:
  object ADOConn: TADOConnection
    ConnectionString = 
      'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' +
      'fo=False;Initial Catalog=HKCN;Data Source=hudson'
    IsolationLevel = ilReadUncommitted
    LoginPrompt = False
    Provider = 'SQLOLEDB.1'
    Left = 32
    Top = 24
  end

解决方案 »

  1.   

    Try
    ADOconn.BeginTrans
    adoquery1.edit
    ..
    adoquery1.post;
    ADoconn.commitTrans;
    except
    adoconn.rollback;
    end;
      

  2.   

    我采用了try..except..end,
    但它没有提示异常,表示正常提交了,为什么数据还是没有保存下来?
      

  3.   

    我的意思是:
    是不是ADOConnection的什么属性设置会导致这种现象?
    比如IsolationLevel属性。
    而且两个ADOQuery上都有计算字段。
      

  4.   

    qryDetail的数据用TDBGrid显示,而不是adoquery1的数据用dbgrid显示
      

  5.   

    qryMain:TADOQuery中的LockType是什么?不是用的lpBatch...吧!如果是的话,更新数据的时候请用UpdateBatch