为了保证两个表的一致性.在执行一大堆sql前设置了database1.StartTransaction 开始事务,成功后commit,但是发现不加事务前执行速度不到1秒,而现在竟然4/5秒了,速度怎么差别这么大呢? 这问题怎么能解决呢?

解决方案 »

  1.   

    sql语句就是简单的insert 表里面,语句简单. 有没有别人遇到同样的情况啊.这是个前台销售系统,等待几秒种是很明显的啊,原先不加事务的时候非常快的.
      

  2.   

    同意楼上的意见。把你的SQL贴出来看看。另外我用DOA来开发Oracle应用,
    性能巨强。
      

  3.   

    wDataM.dboracle.StartTransaction;
      try
            for i:=0 to Invs.Count-1 do
            begin
              ainvcom:=TInv_com(Invs.Objects[i]);
              SendInvCom(ainvcom);
            end;          SendInvMain(inv_inv);    wDataM.dboracle.commit;
      except
        wDataM.dboracle.Rollback;
      end;
    其中SendInvCom 和SendInvMain 两个函数,SendInvCom里面有一些操作但主要是下面
         ss:='INSERT INTO XP_ARTI(SEQNO,SYJH,FPHM,RQSJ,'
                +' YYYH,COM_CODE,SPLB,GZ,SL,ZHHSJJ,LSJ,JG,ZKE,ZRE,LSZKFD,'
                +' HYZK,HYZKFD,YHZK,YHZKFD,SYSY,YSYJH,YFPHM,FLAG,DZXL,GYS,PP,'
                +' YHSEQNO,YJHX,YJHXZKFD)'
    +' VALUES ('
                +IntToStr(seqno)+','''+inv_syjh+''','+IntToStr(fphm)
                +',TO_DATE('''+rqsj+''',''YYYY/MM/DD HH24:MI:SS''),'
          +''''+yyyh+''','''+code+''','''+splb+''','''+gz
                +''','+FloatToStr(sl)+',0,'+FloatToStr(lsj)+','+FloatToStr(jg)
                +','+FloatToStr(zke)+','+FloatToStr(zre)+','+FloatToStr(lszkfd)
    +','+FloatToStr(hyzke)+','+FloatToStr(hyzkfd)+','+FloatToStr(yhzke)
                +','+FloatToStr(yhzkfd)+','+FloatToStr(sysy)+','''+ysyjh
                +''','+IntToStr(yfphm)+',''N'','''+dzxl+''','''
                +yhgys+''','''+pp+''','+IntToStr(yhseqno)+','''+yjhxcode+''','
                +FloatToStr(yjhxzkfd)+')';
          oraQueryExec(ss);
      

  4.   

    建议你用ADOConnection或SQLConnection,或ODAC
    连接Oracle速度比TDataBase快很多
      

  5.   

    wDataM.dboracle.commit;放到SendInvCom函数中试试