:
1)
30-40 . , , . , , :
repeat
PartialData := genericREST_Get(baseURL, resource, suffix);
FullDataMemTable.CopyDataSet(PartialData);
until PartialData.IsEmpty;
2) , DataSet , (Eof, FieldByName, Next ..). "Next" eof, . , DataModule. , - dm1.ds_Generic.DataSet.Next, dm1.Next.
constructor TDataFetcher.Create(BaseUrl, Resource, Suffix: string);
begin
FBaseUrl := BaseUrl;
FResource := Resource;
FSuffix := Suffix;
end;
procedure TDataFetcher.Open;
begin
FData := genericREST_Get(FBaseURL, FResource, FSuffix);
end;
procedure TDataFetcher.GetNextData;
begin
FData := genericREST_Get(FBaseURL, FResource, FSuffix);
end;
function TDataFetcher.Eof: boolean;
begin
result := FData.Eof;
end;
function TDataFetcher.FieldByName(FieldName: string): TField;
begin
result := FData.FieldByName(FieldName);
end;
procedure TDataFetcher.Next;
begin
FData.Next;
if FData.Eof then
begin
GetNextData;
end;
end;
:
a) TClientDataSet
, TClientDataSet MoveBy:
function MoveBy(Distance: Integer): Integer; virtual;
Inherited MoveBy EOF, . , , , . , , .Last? . , , .
function TMyDataSet.MoveBy(Distance: Integer): Integer; override;
begin
inherited MoveBy
if self.Eof then
begin
FetchMoreData;
end;
end;
b) FetchOnDemand
ClientDataSet FetchOnDemand. , RestDataAdapter. , , , , ClientDataSet .