请问如何将 ADOdataset 的全部数据 快速地 复制到 clientdataset 控件中!!!!!! 急!!!例如:ADOdataset 已经打开了 1万条的记录 , clientdataset 和 ADOdataset 表结构是一样的 ,但 clientdataset 是没有记录的 !!,  如何将 这 1万条的记录  快速地 复制到 clientdataset 控件中 。如果一条一条地导入会很慢!! 请各们高手帮忙解决!!

解决方案 »

  1.   

    1w条数据在内存里循环会瞬间完成,你觉得很慢是不是没有关闭dataset的数据感知空间?
    这样写看看  ADODataSet.DisableControls;
      ClientDataSet.DisableControls;
      try
        ADODataSet.First;
        ClientDataSet.Close;
        ClientDataSet.Open;
        
        while not ADODataSet.eof do begin
          ClientDataSet.Append;
          ClientDataSet.Fields[XXX].Value := ADODataSet.Fields[XXX].Value;
          ClientDataSet.Fields[XXX].Value := ADODataSet.Fields[XXX].Value;
          ClientDataSet.Fields[XXX].Value := ADODataSet.Fields[XXX].Value;
          ...      ClientDataSet.Post;
          ADODataSet.Next;
        end;
      finally
        ADODataSet.EnableControls;
        ClientDataSet.EnableControls;
      end;
      

  2.   

    还一个我没测试过的办法。放一个DatasetProvider,DataSetProvider.DataSet:= ADODataset;
    ClientDataset.Data:= DataSetProvider.Data;
      

  3.   

    这是将一个DBGRID的值传递给另一个的方法,也许有用(未测试)期待高手提出更好办法!
    begin
    while not DBGrid2.DataSource.DataSet.Eof do
      begin
        for i := 0 to DBGrid2.Columns.Count - 1 do
        begin
          if Assigned(DBGrid2.Columns.Grid.Fields[i]) then
            if Lines = '' then
              Lines := DBGrid2.Columns.Grid.Fields[i].Text
            else
              if i = 0 then
                Lines := Lines + DBGrid2.Columns.Grid.Fields[i].Text
              else
                        ADODataset1.Edit;
                DBGrid1.Columns.Items[i].Field.Text:= DBGrid2.Columns.Items[i].Field.Text;
                ADODataset1.Edit;
                ADODataset1.UpdateRecord;
                DBGrid1.DataSource.DataSet.Insert;
                  end;
         DBGrid2.DataSource.DataSet.Next;     end;   
      

  4.   

    赞同pazee提供的对象赋值方法!