Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 27 апр 2024, 09:55

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
СообщениеДобавлено: 15 июн 2022, 11:20 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Добрый день.
Обнаружил, что при открытии MemTableEh событие OnCalcFields для всех (!) записей выполняется дважды.

Первый раз после события открытия MemTableEh (так и должно быть), а второй раз (сразу же после первого) - после вызова события InternalRefreshFilter в процедуре
TCustomMemTableEh.OpenCursor(InfoQuery: Boolean) (модуль MemTableEh.pas)

Второй раз явно лишний, тем более, что и фильтров у меня никаких не задаётся.

Подскажите, пожалуйста, как правильно будет исключить второе срабатывание OnCalcFields.
Большое спасибо!

P.S. EhLib 10.1.020


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 июн 2022, 17:25 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Но ведь реально дублирование...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 июн 2022, 13:09 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Up


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 июн 2022, 13:29 
Не в сети

Зарегистрирован: 14 окт 2014, 11:19
Сообщений: 62
кмк сама технология не гарантирует последовательность OnCalcFields(вызывется первая, потом последняя) так и количество вызовов. Может вызываться хоть 10 раз на 1 запись.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 июн 2022, 13:37 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Спасибо за ответ.
Это понятно, но когда при простом открытии MemTable дважды пробегается строго по всем записям (специально проверял), здесь-то один "пробег" наверняка можно исключить.
Пусть не сильно (зависит от того, что выполняется в OnCalcFields), но это всё равно сказывается на производительности при большом количестве записей.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 июн 2022, 08:39 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Up


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 июл 2022, 13:56 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Up


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 июл 2022, 19:38 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Уважаемые разработчики. Пожалуйста, прокомментируйте мой вопрос.
Ведь это может оптимизировать скорость открытия MemTableEh.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 июл 2022, 09:29 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
В 10.1.029 проблема осталась


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 июл 2022, 06:21 
Не в сети

Зарегистрирован: 25 авг 2014, 12:17
Сообщений: 69
Прям какой-то игнор вопроса получается :?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 июл 2022, 08:50 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Даже непонятно почему. А ведь даже просмотров у этого вопроса прилично, значит многих он заинтересовал.
Если разработчик не считает это проблемой или не знает, как её исправить - почему не написать об этом :(


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 июл 2022, 15:31 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Up


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 июл 2022, 00:45 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

К сожалению, простым исправлением данную проблему решить не получается.
В текущей реализации встроенные алгоритмы вызывают пересчет калькулируемых полей избыточное количество раз т.к. пересчет нужен во многих случаях.
Одно и тоже событие OnCalcFields также используются и для пересчета полей типа fkInternalCalc.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 июл 2022, 07:40 
Не в сети

Зарегистрирован: 24 дек 2012, 11:18
Сообщений: 77
Понял вас. У меня тоже не получилось.
Большое спасибо за ответ!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB