Я работаю над старым проектом 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
с большими наборами данных?