主从表结构,子表采用缓存更新模式,在保存前我想手工检查Detail中每一行的数据合法性(不能完全由数据库来进行检查,某些数据库中可以为空的字段在业务上不允许为空,但是数据库结构已经不可更改),但是现在有一个问题,我在保存中是这样写的:
    if not DetailDataIsValid() then
      Abort;
      
    if AQryDetail.State in dsEditModes then //如果用户在没有修改子表则子表
                                            //不需要Update
    begin
      AQryDetail.Post;
      AQryDetail.UpdateBatch();
    end;在作Detail的数据合法性检验中我对AQryDetail进行了遍历,但是单步跟踪的结果发现,在作遍历的时候,只要改变了Dataset的当前行(First、Next等等),就会是AQryDetail的State变成dsBrowse,因此子表数据就不会保存了。请问各位大虾有什么更好的办法没有?先谢过了!!!

解决方案 »

  1.   

    不管有无修改,调用一次UpdateBatch并不会牺牲什么效率的
      

  2.   

    不行,如果没有修改,作提交的时候就会提示AQryDetail: Dataset not in edit or insert mode错误
      

  3.   

    那是post时出现的错误,不关UpdateBatch的事,代码改成如下这样就可以了:
        if not DetailDataIsValid() then
          Abort;
          
        if AQryDetail.State in dsEditModes then //如果用户在没有修改子表则子表
                                                //不需要Update
        begin
          AQryDetail.Post;    end;
        AQryDetail.UpdateBatch();
      

  4.   

    谢谢,在缓存更新模式下Post和UpdateBatch各做的什么操作?
      

  5.   

    Post只是将数据保存在内存中,UpdateBatch才是真正将数据保存到物理数据库中