使用查询的 AfterOpen 事件而不是 AfterFetch。
procedure TForm1.UniQuery1AfterOpen(DataSet: TDataSet);
begin
StatusBar1.Panels[1].Text:= 'Records: ' + inttostr(uniQuery1.RecordCount);
end;
也来自德瓦特:
对于 ClientDataSet 中的数据获取过程的映射,您应该将 ClientDataSet.PacketRecord 属性设置为等于 UniQuery.FetchRows 并使用 ClientDataSet.GetData 事件进行数据获取过程的映射
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.PacketRecords := 25;
ClientDataSet1.Open;
while not ClientDataSet1.eof do
ClientDataSet1.next;
end;
procedure TForm1.DataSetProvider1GetData(Sender: TObject;
DataSet: TCustomClientDataSet);
begin
if ClientDataSet1.Active then ShowMessage(IntToStr(ClientDataSet1.RecordCount));
end;