因为要连多个服务器,所以,我在本地内存里建了一个dataset然后把查询返回的dataset都复制到这个本地的dataset中。如果用简单的命令: select top 10 * from xxx
这样的话,几个远程能很快返回来的,然后都正常添加到本地的dataset中。查是如果我要复杂点的命令,要执行几秒或是十几秒的那种~~~
能正常返回,但是返回后无法正常添加到本地的dataset中~~提示是本地的dataset的 field 某字段 cannot be modified~~
============================================
    i := SQLDataSet.FieldCount;
    while not SQLDataSet.Eof do
      begin
        TempDataSet.Append;
        for j := 0 to i-1 do
        begin
          TempDataSet.Fields[j].value := SQLDataSet.Fields[j].value;
        end;
        TempDataSet.Post;
        SQLDataSet.Next;
      end;=======================================初次发贴,没啥分....不知道给多少合适............

解决方案 »

  1.   

    怎么这样赋值?给你个参考:
    function insertCDSdata(s, d: Tclientdataset): boolean;
    var
      V:Tbook;
    begin
      Result:=true;
      try
        V:=D.GetBook;
          if D.Active then
            d.AppendData(S.Data,False)
          else
            D.Data:=S.Data;
      Finally
        D.GotoBook(V);
        D.FreeBook(V);
      end;
    end;
      

  2.   

    好象我找到问题所在了。因为是直接复制返回的那个dataset,所以如果没有指定好类型什么的话就会出问题。我再试过确认确认。
      

  3.   

    刚才找了一下,还没找到类似于Tclientdataset这种复制方法,如果有的话就方便多了。
      

  4.   

    呵,谢谢楼上的兄弟.我找到问题了.就是上面所说的那个。我最后建一个临时表,然后再select这个临时表传回来就有类型了。搞定!