两个数据集field一样的,但是处于两个不同的数据库中
procedure CopyDataSet(CD:TClientDataSet;SD:TSimpleDataSet)
var
  AData:OleVariant;
  arr:Array of TVarRec;   //???
  I:Integer;
begin
  CD.Open;
  SD.Open;
  AData:=CD.Data;  for i := VarArrayLowBound(AData, 1) to VarArrayHighBound(AData, 1) do
  begin
    arr:=VarArrayGet(AData,I);                   //这是错的,我是想取一整行数据
    SD.AppendRecord(arr);            //这是错的,我想插入一整行数据
  end;
//  或者
  for i:=0 to CD.RecordCount do
  begin
     CD.xxxxx    //这里想取一整行数据
     SD.AppendRecord(xxx);            //这里插入一整行数据
     CD.next
  end;  CD.Close;
end反正我想一次从TClientDataSet取一整行数据插入到TSimpleDataSet,
如果是POWERBUILDER就非常好做DELPHI我研究几天搞不定。。快崩溃了
重分求教高手

解决方案 »

  1.   


    抛砖引玉:{方法一}
    var
      FieldArr : Variant;
      I : Integer;
    begin
      FieldArr := VarArrayCreate([0,DataSet2.Fieldcount],VarVariant);
      for I := 0 to DataSet2.FieldCount-1 do
        FieldArr[I] := DataSet2.Fields[I].Value;
      DataSet1.Insert;
      for I := 0 to DataSet1.FieldCount-1 do
        DataSet1.Fields[I].Value := FieldArr[I];
      DataSet1.Post;
    end;{方法二}
      DataSet1.InsertRecord([DataSet2.Fields[0].Value, {...所有字段...}]);{方法三}
    用SQL语句,Insert Into...
      

  2.   

    to lihuasoft
      
    {方法一}
      我现在就是这样做   for i=0 to ds1.recordcount
      begin
        ds2.append;
        for j=0 to ds2.fieldcount
          ds2.field[j].value:=ds1.field[j].value
        ds2.post;
      end
    {方法二}
      DataSet1.InsertRecord([DataSet2.Fields[0].Value, {...所有字段...}]);//这里不能动态写FieldCount{方法三}
    用SQL语句,Insert Into 表1 Select * from 表2 ...  //两个不在同一地方的数据库  例如一个在北京一个在上海
      

  3.   

      
    {方法一} 
      我现在就是这样做   for i=0 to ds1.recordcount 
      begin 
        ds2.append; 
        for j=0 to ds2.fieldcount 
          ds2.field[j].value:=ds1.field[j].value 
        ds2.post; 
      end 
    {方法二} 
      DataSet1.InsertRecord([DataSet2.Fields[0].Value, {...所有字段...}]);//这里不能动态写FieldCount {方法三} 
    用SQL语句,Insert Into 表1 Select * from 表2 ...  //两个不在同一地方的数据库  例如一个在北京一个在上海 
    这些都是不错的方法 你可以试一下
      

  4.   

    现在我用PB做的datastore ds_1,ds_2
    ll_num = ds_1.retrieve()
    ll_num=ds_1.rowscopy(1,ll_num,primary!,ds_2,1,primary!)
    ds_2.update()PB用4秒搞定1500条数据下面是DELPHI 做同样的工作
      ds1.open;   //这是ClientDataSet 向远程取数据
      for i=0 to ds1.recordcount 
      begin 
        ds2.append; 
        for j=0 to ds2.fieldcount 
          ds2.field[j].value:=ds1.field[j].value 
        ds2.post; 
      end 
      ds2.AppendData(-1);
    DELPHI 用了10秒左右
      

  5.   

    delphi的数据集都有一个CLONE()方法吧?]
    这什么不用这个方法呢?-------------------------------------------------------------------------
    Duplicates another dataset in the calling componentprocedure Clone(Source: TCustomADODataSet; LockType: TLockType = ltUnspecified);   adoquery1.Clone();-----------------------------------------------------------------------
    Shares the data belonging to another client dataset.procedure CloneCursor(Source :TCustomClientDataSet; Reset: Boolean; KeepSettings: Boolean = False); virtual;
       ClientDataSet1.CloneCursor();
      

  6.   

    使用OpenDatasource操作两个不同服务器/数据库,一条SQL搞定
      

  7.   

    而且很反感楼主这种操作方式
    搞这种问题首先考虑引用外部数据库,直接用一条SQL语句搞定,然后考虑DTS Package调用。
      

  8.   

    OpenDatasource 不能用在主从都是SYBASE数据库上