|
|
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
istrebitel>Просто сделать DataSet.Open внутри другого потока, наверно, не получится, т.к. датасет В отдельной нити придется не отдельный запрос формировать, а отдельный коннект, а запросы в контексте этого коннекта формировать. И - с чего вы решили, что это поможет? Отрисовка все равно выполняется в "основной" нити, пока запрос в отдельной нити не завершится - отрисовка не начнется, плюс надо результаты запроса в дитеил-датасет вернуть, . И запрос не сформируется, пока из мастер-датасета не будут переданные значения мастер-ключа. В общем, непонятно, как вы мультитрейдингом ускорите отображение в дитеил-гриде. Разве что в кэш в фоне потихоньку данные набирать, чтобы потом ими пользоваться, не обращаясь к базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2021, 09:19 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Подчиненный датасет должен обновляться мгновенно, ведь он ограничен значением мастер-ключа. Что у вас там тормозит. 2 с половиной секунды, причем зависит от количества записей. 5 записей - 1,5 секунды, 10 - 2,5 и т.д. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2021, 10:44 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ istrebitel>Просто сделать DataSet.Open внутри другого потока, наверно, не получится, т.к. датасет В отдельной нити придется не отдельный запрос формировать, а отдельный коннект, а запросы в контексте этого коннекта формировать. И - с чего вы решили, что это поможет? Отрисовка все равно выполняется в "основной" нити, пока запрос в отдельной нити не завершится - отрисовка не начнется, плюс надо результаты запроса в дитеил-датасет вернуть, . И запрос не сформируется, пока из мастер-датасета не будут переданные значения мастер-ключа. В общем, непонятно, как вы мультитрейдингом ускорите отображение в дитеил-гриде. Разве что в кэш в фоне потихоньку данные набирать, чтобы потом ими пользоваться, не обращаясь к базе. Не ускорить отображение, а убрать зависание на скроллинге, когда сделал паузу, начался дочерний запрос, и снова нажал скроллинг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2021, 10:47 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ В отдельной нити придется не отдельный запрос формировать, а отдельный коннект, а запросы в контексте этого коннекта формировать. Здесь есть нюанс, в зависимости от использованного драйвера и способа заполнения основного грида. Некоторые драйверы, в определённых режимах CursorKind, не дадут обращаться к БД пока полностью не дофетчится (например MsSQL при CursorKind = ckAutomatic и не установленном NativeClient будет сыпать ошибками raised exception class EMSSQLNativeException with message '[FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver]Подключение занято до получения результатов для другого hstmt'. при CursorKind = ckDynamic работать будет, но медленнее). FireDAC вроде как выстраивает в очередь запросы, так что подлагивания будут при скроле вниз, при фетчинге очередной порции. Можно сделать чтобы это было пореже установив RowsetSize побольше, а если RowsetSize будет больше, чем количество строк, то фетч будет только один, при открытии датасета. ъъъъъ И - с чего вы решили, что это поможет? Отрисовка все равно выполняется в "основной" нити, пока запрос в отдельной нити не завершится - отрисовка не начнется, плюс надо результаты запроса в дитеил-датасет вернуть, . И запрос не сформируется, пока из мастер-датасета не будут переданные значения мастер-ключа. Поможет избавиться от svnvlad Если момент скроллинга попадает на начало перерисовки нижней сетки, то происходит зависание до конца перерисовки. Раньше на каждую запись зависало, теперь только в этом случае. Допустим запрос из БД занимает 1 секунду, а отрисовка 50 миллисекунд. Когда сработал таймер запрос, выполняющийся в главном потоке, парализует скролинг. Если запрос выполнять в отдельном потоке, то скролинг будет парализоваться только на время отрисовки грида, в момент прицепления его к DataSource. А это скорее всего меньший интервал. Но надо тестить. ъъъъъ В общем, непонятно, как вы мультитрейдингом ускорите отображение в дитеил-гриде. Метод не ускорит отображение в детайле, метод уменьшит тормоза при скролинге в мастере. С MemTable даже без отцепления грида работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2021, 11:33 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
svnvlad OnDataChange Может, назначать событие после открытия формы, а OnShow/onActivate? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2021, 12:42 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
svnvlad Пересадил на FDQuery.AfterScroll - теперь при открытии формы он 50 раз вызывается, на каждую из 50 записей в сетке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2021, 14:39 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ svnvlad Пересадил на FDQuery.AfterScroll - теперь при открытии формы он 50 раз вызывается, на каждую из 50 записей в сетке. Нет, не пробегаюсь. Протестировал уже на 2 формах с сетками. При создании формы AfterScroll вызывается столько раз, сколько записей в сетке. Если только RecordCount не вызывает такое поведение. Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2021, 15:23 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
svnvlad Если только RecordCount не вызывает такое поведение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2021, 20:33 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ svnvlad Если только RecordCount не вызывает такое поведение. cmVisible ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2021, 03:48 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
svnvlad Нет, не пробегаюсь. Протестировал уже на 2 формах с сетками. При создании формы AfterScroll вызывается столько раз, сколько записей в сетке. А "сетка", небось, девэкспрессовская. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2021, 05:56 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
softwarer svnvlad Нет, не пробегаюсь. Протестировал уже на 2 формах с сетками. При создании формы AfterScroll вызывается столько раз, сколько записей в сетке. А "сетка", небось, девэкспрессовская. Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 00:34 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 02:49 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
если сетка DevExpress, то я вешаю на событие DataSource.OnUpdate и TableView.OnSelectionChanged. Вроде проблем не было, но мне больше нравиться сетка EhLib а там DataSource.onDataChange ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 08:44 |
|
||
|
DataSource.OnDataChange - почему выполняется 2 раза при новом открытии формы?
|
|||
|---|---|---|---|
|
#18+
cptngrb мне больше нравиться сетка EhLib а там DataSource.onDataChange Мне тоже раньше больше нравилась, более простая, понятная, но сейчас вижу недостатки, например: при обновлении сетки и Locate на прежнюю запись происходит скроллинг записи в самый верх сетки. В DevExpress запись остается посередине экрана, где и была. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2021, 01:46 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40043555&tid=2037619]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 436ms |

| 0 / 0 |
