При использовании FetchAll := False
имеется необходимость пересчитывать и выводить "итоги" только по полученным записям.
т.к. при переборе записей принудительно вызывается Fetch, подсчет будет проходить до тех пор пока не догрузятся все записи, что "противоречит" заданной опции.
на данный момент в TMSQuery имеется возможность только отключить Fetch:
OnMSQueryBeforeFetch(DataSet: TCustomDADataSet; var Cancel: Boolean);
но активировать обратно, - нету.
Можно ли, сейчас, имеющимися методами временно активировать/деактивировать Fetch или реализовать соотв. методы в будущих релизах?
Просто для примера, как необходимое использование методов "перекрытия" Fetch:
Код: Выделить всё
procedure ReCalcSummary;
var
key: integer;
begin
sqlQuery.DisableControls;
try
sqlQuery.DisableFetch; //Временно отключаем
try
key := sqlQueryID.AsInteger;
while not sqlQuery.Eof do
begin
//CalcFieldsSummary
sqlQuery.Next;
end;
if key > 0 then
sqlQuery.Locate('ID', key, []);
finally
sqlQuery.EnableFetch; //Возвращаем
end;
finally
sqlQuery.EnableControls;
end;
end;