是这样的,我用ADODataSet.SaveToFile将数据保存到了一个文件里面。
用ADODataSet.LoadFromFile加载了后,要将这些数据导入到数据表里面。我现在用另外一个ADOQuery打开要导入的表。然后 
ADODataSet.First;
while not ADODataSet.Eof do begin  ADOQuery.Append;
  ADOQuery.FieldByName('').AsString:= ADODataSet.FieldByName('').AsString;
  ADOQuery.Post;  ADODataSet.Next;end;
但这样做效率好低啊,数据几万条后,就要好几秒,而且CPU占用也到了100.有没有更加高效的方法?望指点!

解决方案 »

  1.   

    先载入内存,再从内存一口气载入,或者用insert这个速度会比append快点,但不是非常明显
      

  2.   

    加载后请跑循环的代码请更改如下:
    adocommand1用来提交with ADODataSet.recordset do
    begin
      if recordcount=0 then Exit;
      MoveFirst; 
      adocommand1.close;
      adocommand1.commandtext :=sql;
      adocommand1.prepare;
      while  not  Eof  do   
      begin 
        adocommand1.Parameters.ParamByName('fieldname1').Value := Fields['fieldname1'].value
        adocommand1.Parameters.ParamByName('fieldname2').Value := Fields['fieldname2'].value
        adocommand1.Parameters.ParamByName('fieldname3').Value := Fields['fieldname3'].value
        adocommand1.Parameters.ParamByName('fieldname4').Value := Fields['fieldname4'].value
        adocommand1.Execute;
        MoveNext; 
      end;
    end; 
    测试一下效率
    ====
    分享快乐:www.delphichm.com
      

  3.   

    如有问题,mailto:[email protected]
      

  4.   

    每条记录写库时,解析成SQL,用ADOCommand对象直接执行插入或者更新操作效率应该是最高。
      

  5.   

    另外,解决CPU占用 100% 问题,可以采用多线程,每导入一条记录,sleep(20),如果主界面想知道进度,可以采用线程往对应窗口发消息通知当前处理记录数,对应窗口处理该消息通知用户。