Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ODAC OraQuery и Progressbar / 6 сообщений из 6, страница 1 из 1
29.05.2017, 12:16:50
    #39461418
oraqp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODAC OraQuery и Progressbar
День добрый! Прошу помощи, может кто имел дело с компонентами ODAC!?
Delphi XE3, ODAC 9.0.1, БД Oracle 11.2.
Есть следующий код, по нажатию на кнопку.
Код: pascal
1.
2.
3.
4.
5.
oraq.ReadOnly := True;
oraq.FetchAll := True;
oraq.Sql.Text := 'select ...';
oraq.Execute;
...


* oraq - компонента TOraQuery
Запрос возвращает ~50-100 тыс.строк, выполняется секунд ~10-15.
1. Во время выполнения запроса, приложение "намертво" зависает/блокируется. Возможно ли, каким образом, обойти данную ситуацию?
2. Как отобразить время выполнения запроса на индикации процесса (Progressbar)?
События похожего (на progress) я у компонента не нашёл. Есть After/Before Fetch, OnCalcFilelds..
Возможно ли с помощью этих событий отобразить процесс?
...
Рейтинг: 0 / 0
29.05.2017, 12:25:02
    #39461424
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODAC OraQuery и Progressbar
15 секунд -- это еще норма, для такого времени прогресс-бар не обязателен. Можно просто ограничиться курсором-загрузкой.

Код: pascal
1.
2.
3.
4.
5.
6.
Screen.Cursor := crHourGlass;
try
  // загрузка
finally
  Screen.Cursor := crDefault;
end;
...
Рейтинг: 0 / 0
29.05.2017, 12:31:23
    #39461432
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODAC OraQuery и Progressbar
Такая "проблема", а точнее фича есть в любых компонентах.
Для решения нужно делать запрос в другом потоке. А в главном потоке отображать в ГУИ и можно делать ч-л еще.
И то сам прогресс выполнения хх% получить не удастся.
И параллельное обращение к БД тоже придется делать в новом коннекшене, т.к. основной будет занят сабжем.
...
Рейтинг: 0 / 0
29.05.2017, 12:50:17
    #39461448
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODAC OraQuery и Progressbar
LSVТакая "проблема", а точнее фича есть в любых компонентах.
Для решения нужно делать запрос в другом потоке. А в главном потоке отображать в ГУИ и можно делать ч-л еще.
И то сам прогресс выполнения хх% получить не удастся.
И параллельное обращение к БД тоже придется делать в новом коннекшене, т.к. основной будет занят сабжем.

В DOA есть фича, можно показывать процесс фетча записей на клиента,
а в ODAC чего-то не припомню, никогда не требовалось
...
Рейтинг: 0 / 0
29.05.2017, 13:20:00
    #39461492
ODAC OraQuery и Progressbar
oraqp,

Как вариант, можно перед запросом, в отдельном потоке запустить бесконечную анимацию и после окончания фетча всех записей остановить ее.
...
Рейтинг: 0 / 0
29.05.2017, 13:31:18
    #39461512
oraqp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODAC OraQuery и Progressbar
Отдельный поток для меня не вариант. Ограничимся пока курсором/текстом. Благодарю за ответы!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ODAC OraQuery и Progressbar / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]