我有一个应用,为了减少数据瞬间传输量,需要把一个数据集(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条数据,取不到第六条记录开始的数据
我试了以下做法:
我在一个Form上放了AdoConnection、AdoQuery、DataSetProvider,依次连接,然后放上ClientDataSet、DataSource、DBGrid显示数据,用这些代码:
DataSetProvider.Dataset.Open;
DataSetProvider.Dataset.RecNo := 6;
ClientDataSet.Data := DataSetProvider.GetRecords(5,outRecCount,XMLUTF8Option+MetaDataOption);
结果还是取回了最前面的5条数据,取不到第六条记录开始的数据
RecsOut:Integer;
Options:TGetRecordOptions;
begin
DataSetProvider.Close;
DataSetProvider.Open;
ADOQuery1.RecNo:=6;
Options:=[grMetaData,grXML];
cds.Data:=DataSetProvider1.GetRecords(10,RecsOut,Byte(Options));
end;
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