TAggregateField не рассчитывается при изменении индекса ClientDataset
Я использую TClientDataset, подключенный к DBGrid, с несколькими Агрегированными полями, для вычисления SUM другой пары Float Fields. Все поля были созданы во время разработки.
Все работает, как и ожидалось, до тех пор, пока IndexName в ClientDataset не изменится на пользовательский Index для сортировки Grid. После этого агрегированные поля не рассчитывают свое значение должным образом, и им присваивается значение Null.
Проблема возникает в Delphi XE7.
1 ответ
У меня есть Google, и я нашел решение, которое сработало для меня здесь
В методе TCustomClientDataSet.SetIndex есть ошибка, объявленная в модуле DBClient. В решении предлагается заменить следующий код
if FAggregatesActive then
begin
FAggFieldsInit := False;
ResetAllAggs(FAggregatesActive);
со следующим
if FAggregatesActive then
begin
CloseAggs;
ResetAllAggs(FAggregatesActive);
Насколько я понимаю, замена FAggFieldsInit:= False на CloseAggs вынуждает освобождать агрегаты, а затем пересчитывать их с новым индексом. Как я уже сказал, это решение сработало для меня, и я не заметил никакого нежелательного поведения.
Кредит идет к AndreyZ для оригинального решения.