// adsDes 没有直接连接数据库
adsDes:TADODataSet;
adsDes.Close;
adsDes.FieldDefs.Clear;
with adsDes.FieldDefs do
begin
  Add('fd1',ftString,15);
  Add('fd2',ftString,15);
end;
adsDes.CreateDataSet;// adsSrc 直接连接数据库的数据集
adsSrc:TADODataSet;
adocDB : TADOConnection;
adsSrc.Close;
adsSrc.Connection := adocDB;
adsSrc.CommandText := 'select fd1,fd2 from tb ';
adsSrc.Open;
// 如下的拷贝方法比较慢,当adsSrc里数据多时,显得特别慢,有什么办法可以改进吗?
if (adsSrc.Active) and (adsSrc.RecordCount>0) then
begin
  adsSrc.First;
  while not adsSrc.EOF do
  begin
    adsDes.Append;
    adsDes.FieldByName('fd1').AsString := adsSrc.FieldByName('fd1').AsString;
    adsDes.FieldByName('fd2').AsString := adsSrc.FieldByName('fd2').AsString;
    adsDes.Post;
  end;
  adsDes.Last;
end;
最好可以像TClientDataSet.Data一样能直接赋值!

解决方案 »

  1.   

    adoquery没有这个方法,你可以试下TADODataSet.savetofile另外一个 loadfromfile 这样应该简单吧
      

  2.   


      while not adsSrc.EOF do
      begin
        adsDes.Append;
        adsDes.FieldByName('fd1').AsString := adsSrc.FieldByName('fd1').AsString;
        adsDes.FieldByName('fd2').AsString := adsSrc.FieldByName('fd2').AsString;
        adsSrc.Next; //不好意思,少了一行!
        adsDes.Post;
      end;