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 для оригинального решения.

Другие вопросы по тегам