我想把一个从数据库提取出数据的TClientDataSet.Data赋予给另一个TClientDataSet.Data,因为其中的源数据是从数据库直接查询出来的,所以包含的有各种不同的字段类型,如Integer、DataTime、String等,接收Data包的TClientDataSet预先已经建立了同名的字段,但字段类型全是TStringField类型,如果通过ClientDataSet2.data:=ClientDataSet1.Data进行赋值,程序会报错,错误内容的意思就是字段类型不匹配,我又不想通过循环赋值,那样效率不怎么好,各位大虾,有没有什么好的方法啊???

解决方案 »

  1.   

    在线等待啊!!!
    不知是否可以使用TClientDataSet.GetFieldData方法实现啊?
    如果可以,如何实现呢?
      

  2.   

    使用asString或者AsVariant ,看行不行var
      i,j:integer;
      ff:string;
    begin
      ClientDataSet1.open;
      ClientDataSet2.open;  for i:=1 to  ClientDataSet1.recordcount do
      begin
        for  j:= 0 to ClientDataSet1.FieldCount - 1 do
        begin
          ff := ClientDataSet1.Fields[j].FieldName ;//获取表的字段名
          
           ClientDataSet2.append;
           ClientDataSet2.fidlebyname(ff ).AsVariant = ClientDataSet1.fidlebyname(ff).AsVariant ;
           //ClientDataSet2.fidlebyname(ff ).AsString= ClientDataSet1.fidlebyname(ff).AsString;
        end;    ClientDataSet1.next;
      end;  ClientDataSet2.post;
      

  3.   

    不用循环恐怕不行吧。你另建一个全是string类型的TClientDataSet,并且还要把所有记录给转换过去,目的是什么呢?我觉得你的这一设计思路本身的效率就不高了。