我现在使用的是Delphi+BDE+Oracle,在处理数据时使用Query、UpDateSQL来增加、保存数据。
增加完成的是先Append再ApplyUpdate,保存时是直接ApplyUpdate但大多情况下执行正确,有时则出现Oracle的唯一索引错误(保存时出的错,增加时从来没出过错),通过SQL Monitor的跟踪发现有时保存时,BDE向还后台提交了Insert语句(应该只有UpDate语句)。问题找到了,但是我不知道错在那里,请各位大侠多多帮忙!

解决方案 »

  1.   

    把你的SQL贴出来。
    “通过SQL Monitor的跟踪发现有时保存时,BDE向还后台提交了Insert语句(应该只有UpDate语句)。”
    你的SQL写的有问题吧
      

  2.   

    我没有写SQL语句,UpdateSQL中的语句是这样的
    insert into BDZ_SBDJJL
      (XH, DJID, DYID, PDDJ, PDYY, JLXCSJ)
    values
      (:XH, :DJID, :DYID, :PDDJ, :PDYY, :JLXCSJ)update BDZ_SBDJJL
    set
      XH = :XH,
      DJID = :DJID,
      DYID = :DYID,
      PDDJ = :PDDJ,
      PDYY = :PDYY,
      JLXCSJ = :JLXCSJ
    where
      XH = :OLD_XHdelete from BDZ_SBDJJL
    where
      XH = :OLD_XH再线
      

  3.   

    把save操作放到事务中来
    starttransaction
    commit
    好象是这样吧,忘了,呵呵
      

  4.   

    着是我的程序,好象没有缺什么啊?
      try
        BDModule1.db_Main.StartTransaction;
        DQZQuery.ApplyUpdates;
        DQXQuery.ApplyUpdates;
        BDModule1.db_Main.Commit;
      except
        BDModule1.db_Main.Rollback;
        MessageBoxEx(Handle, msg_Tab_SavErr, msg_Title,
                     MB_OK + MB_ICONERROR,LANG_CHINESE);
      end;
      

  5.   

    好像最后少了DQZQuery.CommitUpdates