|
|
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. База данных: Firebird 2.5 Fib Plus Dataset через стандартный DataSource связан с ДБГридом. Имеется sql-запрос, который выполняется около 5 секунд. Хочется, чтобы на время выполнения запроса progressbar неопределенно играл полоской. У FibDataSet есть события BeforeOpen и AfterOpen. Используя их почему-то progressbar не реагирует на начало выполнения запроса. Реакция только по окончанию запроса (после того как данные отобразятся в DBGrid). Аналогично, когда прописываешь какие-то действия до строчки FIBDataset.Open, действия начинают происходить только по окончанию запроса. Подскажите в каком направлении двигаться, чтобы реализовать подобную функцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 10:17 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Оптимизация запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 10:21 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
24.09.2020 10:17, Explosion пишет: > Подскажите в каком направлении двигаться, чтобы реализовать подобную функцию? в сторону потоков. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 11:31 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Событие BeforeOpen Fib Dataset срабатывает до начала выполнения запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 11:48 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
24.09.2020 11:48, Explosion пишет: > Событие BeforeOpen Fib Dataset срабатывает до начала выполнения запроса? ну а? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 11:49 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий ну а? как бы это самое, ну ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 12:27 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
24.09.2020 12:27, Explosion пишет: > как бы это самое, ну ну дык! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 12:44 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Как вариант вызовите ему Repaint. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 13:43 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
А у FibDataset нету event`a OnFetchRow() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 14:50 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
DarkMaster А у FibDataset нету event`a OnFetchRow() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 14:55 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Ну и пусть себе рисует/апдейтит скроллбар свой на каждом 100м фетче... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 15:11 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
24.09.2020 15:11, DarkMaster пишет: > Ну и пусть себе рисует/апдейтит скроллбар свой на каждом 100м фетче... у него ПЕРВЫЙ фетч только через 100500 секунд. а последующие - быстро. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2020, 15:13 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
DarkMaster _Vasilisk_, Ну и пусть себе рисует/апдейтит скроллбар свой на каждом 100м фетче... Хватило бы, чтобы состояние прогресс бара было в режиме неопредённости. Поэтому достаточно было бы, чтобы вы подсказали точку начала действия и точку конца. OnFetchRow() не нашёл. У запроса мало строк (группировка), поэтому толку в Fetch'ивании нет в данном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 06:45 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Explosion, А если в BeforeOpen, после включения прогрессбара, вставить богомерзкий Application.ProcessMessages?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 09:18 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Explosion DarkMaster _Vasilisk_, Ну и пусть себе рисует/апдейтит скроллбар свой на каждом 100м фетче... Хватило бы, чтобы состояние прогресс бара было в режиме неопредённости. Поэтому достаточно было бы, чтобы вы подсказали точку начала действия и точку конца. OnFetchRow() не нашёл. У запроса мало строк (группировка), поэтому толку в Fetch'ивании нет в данном случае. Запрос выполняется синхронно, то есть приложение будет "заморожено" до тех пор, пока сервер БД не пришлет ответ. Если хочешь "шевеления" в процессе ожидания - используй нити, тебе сразу написали об этом. Выноси в отдельную нить либо запрос, либо отображение картинки, другого пути нет. С использованием TpFibDataSet как источника данных грида, в отдельную нить, скорее всего, придется выносить картинку.Ибо "стандартные" компоненты не предусматривают асинхронную работу. Или все придется делать руками, используя свой датасет, асинхронно взаимодействуюший с нитью загрузки данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 10:13 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
alekcvp Explosion, А если в BeforeOpen, после включения прогрессбара, вставить богомерзкий Application.ProcessMessages?.. Если вставить в BeforeOpen - не работает, если вставить перед строчкой кода dataset.open, то на долю секунды "размораживает" приложение и полоска прогрессбара чуть сдвигается и вновь "замерзает". ъъъъъ Explosion пропущено... Хватило бы, чтобы состояние прогресс бара было в режиме неопредённости. Поэтому достаточно было бы, чтобы вы подсказали точку начала действия и точку конца. OnFetchRow() не нашёл. У запроса мало строк (группировка), поэтому толку в Fetch'ивании нет в данном случае. Запрос выполняется синхронно, то есть приложение будет "заморожено" до тех пор, пока сервер БД не пришлет ответ. Если хочешь "шевеления" в процессе ожидания - используй нити, тебе сразу написали об этом. Выноси в отдельную нить либо запрос, либо отображение картинки, другого пути нет. С использованием TpFibDataSet как источника данных грида, в отдельную нить, скорее всего, придется выносить картинку.Ибо "стандартные" компоненты не предусматривают асинхронную работу. Или все придется делать руками, используя свой датасет, асинхронно взаимодействуюший с нитью загрузки данных. К сожалению не догадываюсь что такое "нити", но правильно ли всё понял: в догонку к sql-запросу из датасета параллельной транзакцией запускаем запрос-близнец через, например, query-компонент и по нему ориентируем анимацию прогресс бара? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2020, 15:36 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Печаль. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2020, 15:49 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Извиняюсь. Загуглил и понял, что речь о Thread. Мимопроходящий в сторону потоков. Теперь понятно про что речь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2020, 16:03 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Создал для полоски прогрессбара отдельный поток, но проблема сохранилась. Во время выполнения запроса форма "замораживается". На модуле формы располагается dataset, кнопка и progressbar: Код: 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. Как думаете, проблема в этом: ъъъъъ отдельную нить, скорее всего, придется выносить картинку.Ибо "стандартные" компоненты не предусматривают асинхронную работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2020, 13:39 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
В Execute() надо выносить всю работу с БД, а не настройку прогрессбара... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2020, 13:49 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Explosion, имхо, в поток выносить открытие датасета (что проще), если он позволяет (не работал с ним), или окно прогресса, но! целиком на WinApi. делал такое для возможности отмены запроса в SDAC типа такого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2020, 14:00 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Explosion, вы это ( 22203248 ) делали? Думается, что вам проще оптимизировать запрос, чем понять, как сделать индикацию выполнения запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2020, 14:16 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Explosion, ну ты сам подумай: чтобы прогрессбар шевелился, его кто-то должен "толкать". Кто у тебя его толкать будет, если основная нить ожидает завершения запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2020, 14:41 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
Explosion, делай так: вывешивай модальное окно с анимацией и кнопкой " Отмена". В параллельной нити - коннект к базе, ожидание аыполнения запроса. По готовности клонируешь данные в контекст основной нити. При нажатии кнопки "Отмена" - посылаешь в нить работы с базой сообщение, там все независимо дождется завершения и терминируется. Но - тоже, зависон при работе с длинным запросом никуда не денется, или используй особые средства работы с ФБ доя прерывания запроса, либо жди завершения. Самое верное - оптимизировать запрос, рпзделить его, изменить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2020, 15:00 |
|
||
|
Компонент FIB Plus Dataset
|
|||
|---|---|---|---|
|
#18+
сделай так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. И не обращай внимания на окружающих, когда начнут ссаными тапками кидаться. Когда разберешься с другими способами оживить основной поток, код поправишь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2020, 23:26 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40005727&tid=2037926]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 450ms |

| 0 / 0 |
