我又发现一个奇怪的问题,缓存更新中,记录已经applyupdates,提交了。这个记录怎么能 cancdlupdates, 回到修改前的样了,不过记录还在数据库表中。cancdlupdates 应该是

解决方案 »

  1.   

    不可能吧?既然已经applyupdates成功了,再cancdlupdates
    都是没用的
      

  2.   

    to 回复人: BoningSword(我爱的人名花有主,爱我的人惨不忍睹) 
    这个问题好了。 good 还有个问题缓存删除的问题。
    query2是缓存数据集,假如我添加十个空记录,当我提交记录applyupdates时,想把没有输入记录先删除,再applyupdates提交记录,怎么办?
    while not dmsl.query2.Eof do
     if (dmsl.query2['shul']='') then
    begin
    dmsl.query2.delete;
    end; 
    以上程序是错误的。
      

  3.   

    1.你的代码是一死循环,不能这样做。应当是在循环中不断地调用locate方法查找shul=''的记录,找到就删除,找不到就跳出循环。
    2.应当在记录post时检查输入记录的合法性,不要在applyupdates时做。
      

  4.   

    一句话就可以了。
    while dsgnintf.pas.locate('shul','',[]) do 
      delete;
    然后applyupdates。
    这是不是你想要的?
      

  5.   

    to 回复人: TWWH() (  ) 信誉: 我是用query控件。
    locate好象针对table
      

  6.   

    我搞的是销售主,从表录入,从表当然是一次添加多个空记录,我采用是缓存处理。主从表录好后一起提交。当我提交记录时,想把没有输入记录先删除,再提交记录。
    路漫漫其路远也。最近我没有其他事情。拾起以前程序继续写起来。不知何时修成正果。我正在努力中其中,在这当中我要感谢各位无私的教诲!。分当然不是主要的,认识这么多朋友真高兴!请大家继续关注我的贴子。我想我现在真离不开大家。CSDN真是个大家庭。在这个销售主、从表录入表单中。主从表我是分开提交的
     dmsl.query1.database.applyupdates([dmsl.Query1]);
     dmsl.Query2.Database.ApplyUpdates([dmsl.query2]);
    增加,修改,删除基本能行。就是以上一次删除多条空记录有点问题。还有的问题,我想把整个过程封装在事务中,主、从表添加一起提交,出错就回滚。
    怎样把整个过程封装在事务中,
    dmsl.database1.starttransaction;
       try
        //dmsl.Query1.Post;
        //dmsl.Query2.Post;
       dmsl.query1.database.applyupdates([dmsl.Query1]);
        dmsl.Query2.Database.ApplyUpdates([dmsl.query2]);
        dmsl.Database1.Commit;                         //出错
       except
        dmsl.database1.Rollback;    Messagedlg('操作失败!',mtwarning,[mbOK],0);
       end; 这个事务怎么不执行。
      

  7.   


    to回复人: TWWH() (  ) 信誉:100 
    while  dmsl.query2.locate('shul','',[])then
    begin
    dmsl.query2.delete;
    end; 
    shul为数值类出错。请教各位。