本帖最后由 jjwang2004 于 2009-11-27 00:06:41 编辑

解决方案 »

  1.   

    方式一,可以改進,將sql語句的指定,放在外部,然后prepare;
    方式二,若dataset沒有采用cache更新數據,在下一次append之前,就會執行post,將數據提交到數據庫;兩種方式哪個快,你可以采用sql profile跟蹤看看。沒有實際跟蹤,不知道。個人猜測:方式一改進後,會比較快
      

  2.   

    这是两种插入记录到数据库的方法,如果只谈插入效率的话,当然是insert快,因为insert与界面无关,直接通过sql把数据插入到数据库,并不立即显示在界面append的结果会即时反映到界面,而且会触发相关事件,如果从所见即所得的角度去看,append要好一些
      

  3.   

      就是缓存的功能.   locktype  ltbatch  这个就行了.
      

  4.   

    倾向于第一种
    sql语句是最快的
    全部insert之后再显示数据
    要比insert一条之后就更新好很多
      

  5.   

    一万条 两种方式都会让人崩溃吧 
    第一种方式如果在循环中间加上 Application.ProcessMessages 至少不会有假死的情况出现第二中方式 如果tempQry是设置的批量提交模式 再最后提交的时候会需要较长时间,如果不是这个模式和第一种有点类似,在新增一条记录时上一条记录会提交到数据库可以试试以第二种方式设置成批量提交的模式(即tempQry.CursorType:=ctStatic;tempQry.LockType:= ltBatchOptimistic;)然后每一百条(或其他值)记录 post或 updatebatch一次没有试过 不知道 会不会好点
      

  6.   

    其实都差不多了,数据量不大你根本没必要考虑。
    第二种更清晰,语言风格更好一些,毕竟是ado自己提供的方法。
      

  7.   

    第一种方法在进行重复打开、关闭数据库组件,本身SQL语句应该是简单的。而且每打开一次只提交一条SQL语句,如果将这些SQL积累到一定条数(比如00条)再提交到数据库,那么其效率将有所提高,即类似于:
     
    for i:=0 to 100 do begin
      with insertQry do begin
        close;
        sql.Clear;
        for j:=0 to 99 do
        begin
          sql.Add('insert into myTbl(mID) values('+Inttostr(i*100+j)+')');
        end;
        ExecSQL;
      end;
    end;第二种方法在数据库中肯定有缓存,Append会将数据暂存到缓存中,待Post时会一次性将数据提交给服务器,至于提交的过程,我想应该不是以SQL语句的形式提交,效率应该更高一点儿,但是就如4楼所说,如果没有禁止刷新界面的话,其效率受界面影响,如果禁止刷新界面的话,其效率肯定比一次提交一条SQL语句的第一种方法要高得多。10000条语句在实际插入的过程中,也就是几秒种的事,如果要测试的话,建议将再加大10倍数据量。