RecordCount с компонентом UniDAC Dataset

Я использую компонент TUniQuery от UniDAC. Я хочу показать, сколько у меня записей, поэтому

Я поместил следующий код для отображения в строке состояния:

procedure TForm1.unyQuery1AfterFetch(DataSet: TCustomDADataSet);
begin
    StatusBar1.Panels[1].Text := 'Número de registros: ' + inttostr(unyQuery1.RecordCount);
end;

UnyQuery1.RecordCount всегда возвращает ноль. Но если я запускаю этот код из события нажатия кнопки, он работает.

Что я делаю не так?


person Daniel Grillo    schedule 27.12.2013    source источник
comment
Вы пробовали искать загрузку прогресса UniDAC?   -  person TLama    schedule 28.12.2013
comment
На http://docwiki.embarcadero.com/Libraries/XE5/en/Data.DB.TDataSet.RecordCount даются общие советы по recordCount. Количество может зависеть от того, где вы находитесь в наборе данных TUniDac. Если он возвращает 0, возможно, вы ничего не получили. Посмотри, что сказал @TLama   -  person DavidG    schedule 28.12.2013
comment
Какие у вас настройки для FetchAll и QueryRecCount? Вы в блокирующем или неблокирующем режиме?   -  person Sam M    schedule 28.12.2013
comment
Неправильно используется счетчик записей для источников данных, отличных от ISAM (не dbf или парадокс)   -  person Arioch 'The    schedule 28.12.2013
comment
Что такое настоящая база данных?   -  person user3927897    schedule 31.01.2015


Ответы (1)


Используйте событие AfterOpen запроса, а не AfterFetch.

procedure TForm1.UniQuery1AfterOpen(DataSet: TDataSet);
begin
StatusBar1.Panels[1].Text:= 'Records: ' + inttostr(uniQuery1.RecordCount);
end;

также от devart:

Для отображения процесса получения данных в 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;
person user3777264    schedule 31.01.2015