Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выполнение запросов Oracle в отдельном процессе. [D7, WinXP]


tytus ©   (2007-04-16 18:22:00) 

Доброго дня мастера. Когда TOracleQuery  или TOracleDataSet выполняют запрос, то окно формы на которой лежат сии компоненты нельзя ни перетащить ни нарисовать процесс выполнения (пусть даже символически). Можно ли запустить выполнение запросов в другом процессе, чтобы можно было рисовать процесс выполнения и двигать форму.


Карелин Артем   (2007-04-18 08:48:00) [1]


> tytus ©   (17.04.07 16:52) [8]

Если пункт 2 неприемлем, смотри пункт 1


ANB   (2007-04-17 19:27:00) [2]


> - где?

Ну - можно свой класс-обертку написать и ждать в нем, можно после каждого Execute цикл сбацать - кому как нравиться.


> ORA-24909 - CLient in process
- эт ты чего делать пытался, огребая эту ошибку ? Судя по ней, сессия занята важным делом, а ты ее дергать пытаешься. Запусти еще одну и извращайся (отдельный поток для этого опять таки не нужен).


tytus   (2007-04-17 18:44:00) [3]

>ANB ©   (17.04.07 18:29) [9]
ORA-24909 - CLient in process
или [5].

> можно циклом ждать- где?


ANB   (2007-04-17 18:29:00) [4]


> А ежели данные не считываются, а
> OracleQuery1.Sql.Add('begin execute .... end;');
> Тогда как?

1) OracleQuery1.Sql.Add('begin execute .... end;'); - вот так лучше не делать.
OracleQuery1.Sql.Text := 'begin execute .... end;'; - так лучше.
2) На фетч лучше не зашиваться, т.к. собственно выполнение запроса может занять полчаса, а фетч редко тормозит (если ты тока не тянешь на клиента пару миллионов записей).
3) Чукча не читатель ? Асинхронку смотрел ? Там опциями включается а потом в основном же потоке можно циклом ждать, не забывая выдавать в нем sleep и ProcessMessages.
ЗЫ. DOA как и ODAC не очень хорошо работают в отдельном потоке.


tytus   (2007-04-17 16:52:00) [5]

>Карелин Артем ©   (17.04.07 14:40) [6]
А ежели данные не считываются, а
OracleQuery1.Sql.Add('begin execute .... end;');
Тогда как?


ANB   (2007-04-17 16:30:00) [6]


> tytus ©   (16.04.07 18:22)

В отдельном потоке выполнять смысла нету. Да еще граблей соберешь немерянно. DOA и ODAC умеют выполнять запросы асинхронно. Главное потом - определить точно момент завершения выполнения.


Карелин Артем   (2007-04-17 14:40:00) [7]

1) вывести в отдельном потоке на экран форму, на которой и будет рисоваться прогресс.
2) В событии OnFetch или подобном, которое возникает при считывании очередной записи, рисовать прогресс и делать Application.ProcessMessages


tytus   (2007-04-17 12:23:00) [8]

>all
ругается : Query thread is still in progress


Sam Stone   (2007-04-17 01:36:00) [9]

TOracleQuery.Threaded + F1


Германн   (2007-04-17 00:51:00) [10]


> чтобы можно было рисовать процесс выполнения

Не факт, что такое возможно в принципе.


Kolan   (2007-04-16 19:34:00) [11]

> Можно ли запустить выполнение запросов в другом процессе,
>

А в отдельном потоке никак нельзя?


Правильный Вася   (2007-04-16 19:08:00) [12]

можно


Наверх

Титульная страница Поиск, карта сайта Написать письмо