我有一个应用,为了减少数据瞬间传输量,需要把一个数据集(TAdoQuery,或TQuery)分包发送,所以要求得到第N包的数据,我用TAdoQuery查询返回一个结果集,用一个DataSetProvider联到TAdoQuery,然后用DatasetProvider.GetRecords(10,RecCount,XMLUTF8Option+MetaDataOption)得到一个有10条记录的数据包,然后我要得到下一个10条记录的包,不知道如何做?Delphi帮助中说需要先设置数据库Cursor位置,但我不知如何设置,用AdoQuery.next不起作用,谁有这方面的经验?
我试了以下做法:
我在一个Form上放了AdoConnection、AdoQuery、DataSetProvider,依次连接,然后放上ClientDataSet、DataSource、DBGrid显示数据,用这些代码:
DataSetProvider.Dataset.Open;
DataSetProvider.Dataset.RecNo := 6;
ClientDataSet.Data := DataSetProvider.GetRecords(5,outRecCount,XMLUTF8Option+MetaDataOption);
结果还是取回了最前面的5条数据,取不到第六条记录开始的数据

解决方案 »

  1.   

    直接使用tclientdataset.GetNextPacket不可以吗?
      

  2.   

    If the provider is in a stateless application server, you must use a BeforeGetRecords event handler to ensure that the data packet returns the correct set of records.
      

  3.   

    var
      RecsOut:Integer;
      Options:TGetRecordOptions;
    begin
      DataSetProvider.Close;
      DataSetProvider.Open;
      ADOQuery1.RecNo:=6;
      Options:=[grMetaData,grXML];
      cds.Data:=DataSetProvider1.GetRecords(10,RecsOut,Byte(Options));
    end;
      

  4.   

    smokingroom(前世与今生) ,呵呵,又是你,分就给你吧。
      

  5.   

    smokingroom(前世与今生)  ,呵呵,又是你,分就给你吧。
      

  6.   

    呵,来迟 前世与今生说得没错, 不过这样写更好点var
      RecsOut:Integer;
      Options:TGetRecordOptions; // 有这个集合吗,看来我落后了
    begin
      //????DataSetProvider.Open;????
      ADOQuery1.Open;
      try
        ADOQuery1.RecNo:=6;
        Options:=[grMetaData,grXML]; // 这个得要自已作个选择
        cds.Data:=DataSetProvider1.GetRecords(10, RecsOut, Options);
      finally
        ADOQuery1.Close;
      end;
    end