现在的问题是:
    我需要把对数据进行的修改一起提交或不提交,
在修改之前我做了:
  With BL_SrvCnt do
  begin
    if not InTransaction then
      BeginTrans;
  end;在保存之后我做了
  With BL_SrvCnt do
  begin
    if not InTransaction then
      BeginTrans;
    CommitTrans;
  end;现在我在DBGRID中移动时他总是自动POST
搞得数据总是即时被提交……
为什么?
怎么样解决?

解决方案 »

  1.   

    在Beforepost里控制,
    但我建议你使用edit组件,在用户按了保存后,再将edit.text赋值给
    grid.filedbyname(''),再datasource.post.
      

  2.   

    ADOQuery.LockType = ltBatchOptimistic;
    提交方法用:ADOQuery.UpdateBatch
      

  3.   

    对于TQuery
    TQuery.CancelUpdates = true;提交方法用:TQuery.ApplyUpdate
      

  4.   

    我用的是ADODATASET
    不是ADOQUERY
    请关注
      

  5.   

    happyzsl(学习) :
    请问我怎么样判断数据是否被修改了呢?
      

  6.   

    把你的开始事务和结束事务的位置变一下.
    比如在进入DBGrid时开始,离开时结束.
      

  7.   

    判断数据是否被修改:TADODataSet.Modified属性
      

  8.   

    回复人: happyzsl(学习) ( ) 信誉:111  2002-12-27 12:53:00  得分:0 
     
     
      判断数据是否被修改:TADODataSet.Modified属性
     
     
    ):
    这样好象不行,
    我有第一行改了一些数据,
    再移动到下一行,
    这样用它来判断就不行了……
      

  9.   

    最好放在edit里,保存的时候在写回数据库
    在数据源的beforepost中不好控
      

  10.   

    modified是数据集是否已修改,
    你是要判断一行是否已修改?
    没做过,不过TField有两个属性CurValue和OldValue,你可以试试
      

  11.   

    就是判断CurValue = OldValue?
    注意:CachesUpdates应为true
    还有就是在提交之前判断(这个当然,呵呵)
      

  12.   

    Modified 属性判断不行,
    因为我在改动过一行后移到另一行,
    这时数据会被保存一次(但不会提交)
    这样Modified 属性就不对了……如果要通过这个属性来判断的话,
    只可能不让它自动保存……
      

  13.   

    谢谢大家,
    这个问题有可能没有说清楚,
    但我现在已经用另外的一种方法来做了,
    效果还可以,
    特别感谢 happyzsl(学习)……