Как выполнить быстрый поиск больших наборов данных TIBQuery с использованием Delphi 5? - PullRequest
0 голосов
/ 12 июня 2019

Я работаю над старым проектом Delphi 5, который использует набор данных TIBQuery.

Мне нужно закрыть набор данных, удалить его основной источник данных, снова открыть набор данных и активировать ту же запись, которая была первоначально сфокусирована.

Набор данных имеет 35 полей и 15.000 записей, и у меня потеря производительности при вызове функции Locate (это занимает около 1 минуты и 35 секунд).

var
  PrevId : Variant;
begin
  //save the id
  PrevId := DstID.AsVariant;
  //close data
  Dst.Close();
  //remove the master dataset
  Dst.DataSource := nil;
  //load data
  Dst.Open();
  //go to the saved id
  Dst.Locate(DstID.FieldName, PrevId, []);
end;

Я знаю, что основной причиной медлительности является большое количество записей, но это не аспект, находящийся под моим контролем.

Я пытался использовать DisableControls / EnableControls, но это не сильно повлияло на производительность (всего на 5 секунд меньше, чем раньше).

var
  PrevId : Variant;
begin
  Dst.DisableControls();
  try
     //save the id
     PrevId := DstID.AsVariant;
     //close data
     Dst.Close();
     //remove the master dataset
     Dst.DataSource := nil;
     //load data
     Dst.Open();
     //go to the saved id
     Dst.Locate(DstID.FieldName, PrevId, []);
  finally
     Dst.EnableControls();
  end;
end;

Существуют ли другие способы оптимизации скорости Locate с большими наборами данных?

...