(**问题没有解决,重新发贴. 总结前贴的测试结果)** 解决后一起结贴
** 关于ADO 主从表的UpdateCatch (批量更新) 问题,请高人指教?初始: 主表 SA          LockType = ltBatchOptimistic , CacheSize =1000    
      从表 SA_ITEM    LockType = ltBatchOptimistic, CacheSize = 1000当新增时 (SA.Append)
       
       SA 明细输完后,输入多笔SA_ITEM
       当 SA_ITEM (not noll) 字段都输完,保存正常.
         例如 (1)
           A     B   C
       ********************** 
           1     1   a
           2     2   3
       **********************
            (表1)
       假如字段C 为(not NULL) 把以上数据改成如下
           A    B   C
         ****************
           1     1   a 
           2     2   
         ******************
             表 (2)
        其中 字段C第二条记录为空,我点保存,提示错误信息(正常,因为字段C第条字段值为空)
             然后我把字段C 第二条记录补上,跟(表1)数据一样,
             或把第二条记录删除(sa_item.delete )
             保存时还是提示错信息.
        出错信息
               "  出错:找不到要更新的列,最后读取的值被变更 "
 我的保存代码是:
 sa_item.FieldByName('f_s_no').Asinteger=1;
Try
 AdoConnection1.BeginTrans;    // 事务开始  
  sa.UpdateBatch();           
  sa_item.UpdateBatch();     
  DMData.ADOConnection1.CommitTrans;       // 提交
Except
  //  XXSingle(水连天【盘古传说】) 指点
  on e:except do   
   begin
    Application.message(pchar('原因:'+e.message),'错误',MB_ICONERROR)
    AdoConnection1.RollbackTrans;     // 回滚
   end;
End;
       
          请指点这是为什么,应该怎么处理?

解决方案 »

  1.   

    晕,没写完全,补
    on e:exception do   
       begin
        Application.message(pchar('原因:'+e.message),'错误',MB_ICONERROR)
        AdoConnection1.RollbackTrans;     // 回滚
       end;
    拦截异常处理的出错信息,e.message显示的内容就是错误原因,把它贴出来给大家看看
      

  2.   

    on e:exception do   
       begin
        Application.message(pchar('原因:'+e.message),'错误',MB_ICONERROR)
        AdoConnection1.RollbackTrans;     // 回滚
       end;出错信息
          " 原因:找不到要更新的列,最后读取的值被变更 "
      

  3.   

    我想这个应该是数据库报出来的,你直接写成SQL的INSERT,UPDATE调试不是更好
      

  4.   

    cdsgajxlp(起名很难) 你好!用insert,update ,当我修改从表(sa_item)时,有作新增,删除,修改动作,再保存.
    那怎么判断哪条记录是被修改,哪条记录是被删除了.
      

  5.   

    先     
      sa_item.UpdateBatch(); 

      sa.UpdateBatch();           
      
    行不行
      

  6.   

    XXSingle(水连天【盘古传说】) 
    错了一次后游标就会失效,ADO里边经常碰到,很多情况下都是要ADOConnection.close处理这应该就是问题的原因了,ADOConnection.Close 会把先前输入的数据(还未保存成功的数据)清楚,
    跟大家商讨一下解决的办法.
    1) . 把输入的数据保存在一临时表中,出错后,ADOConnection.Close 再把数据从临时表返回. 感觉这样来回的操作数据,增加了系统开销.
    以上是我个人的一个解决办法,还有没有更好的解决办法(前提还是用ADO)