Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

ADOQuery и TThread   Найти похожие ветки 

 
Беликов А.А,   (2010-04-07 20:05) [0]

Хочу реализовать открытие датасета в отдельном потоке.
Делаю связку ADOConnection + ADOQuery + DataSource + DBGrid.
ADOQuery.Open запускаю в отдельном потоке.
На тестовом примере ошибок не обнаружено.

Какие могут возникнуть проблемы?


 
sniknik ©   (2010-04-07 20:46) [1]

> Какие могут возникнуть проблемы?
разные... бессмысленные... никому не нужные... безответные... т.к. так не делают, а значит опыта их решения ни у кого нет.


 
Беликов А.А,   (2010-04-07 20:52) [2]

Идея в том, чтоб во время выполнения запроса можно было нормально перерисовывать окно и например показывать красивое анимированное окно шоб юзеру скушно не было.

Если Сникник вы так не делаете, то у вас нет ответов, и тем не менее, у кого был опыт - поделитесь


 
oldman ©   (2010-04-07 21:47) [3]


> ADOQuery.Open запускаю в отдельном потоке.


Почему именно Open?


 
Loginov Dmitry ©   (2010-04-07 22:41) [4]


> На тестовом примере ошибок не обнаружено.
>


Значит еще возникнут. Насколько мне известно, компоненты TXXXConnection очень нежелательно использовать сразу в разных потоках. Одно подключение должно использоваться не более чем в одном потоке.


 
Игорь Шевченко ©   (2010-04-07 22:47) [5]

Loginov Dmitry ©   (07.04.10 22:41) [4]

Это все зависит от возможностей базы данных и ХХХ. Клиент Oracle, например, предоставляет thread-safe клиентскую модель исполнения паралелльных запросов с одним подключением.


 
Loginov Dmitry ©   (2010-04-07 22:53) [6]


> Клиент Oracle, например, предоставляет thread-safe клиентскую
> модель исполнения паралелльных запросов с одним подключением.
>


А какие компоненты подключения используете для работы с Oracle?


 
Игорь Шевченко ©   (2010-04-07 23:24) [7]

Loginov Dmitry ©   (07.04.10 22:53) [6]

Свои


 
MsGuns ©   (2010-04-08 01:36) [8]

>Беликов А.А,   (07.04.10 20:52) [2]
>Если Сникник вы так не делаете, то у вас нет ответов, и тем не менее, у >кого был опыт - поделитесь

Сникник так не делает потому, что в этом нет никакой необходимости, т.к. само АДО использует потоки. Для Вашей задачи достаточно просто запускать запрос в асинхроноом режиме,- читайте справку по АДО, там все подробно написано.


 
Беликов А.А   (2010-04-08 09:19) [9]

Вы наверно имеете ввиду eoAsyncFetch или eoAsyncFetchNonBlocking...

Засада в том, что eoAsyncFetch отпускает главный процесс только тогда, когда на стороне сервера набор получен полностью.

А в случае eoAsyncFetchNonBlocking набор получает записи, а грид сразу начинает их отрисовывать.

Хотел получить нечто среднее, т.е. во время выполнения запроса юзер мог бы передвигать окно + анимированное окно, НО в то же время никаких записей в гриде.

eoAsyncFetchNonBlocking + DBGrid.DataSource = nil - не вариант.

p.s. Сервер MSSQL


 
sniknik ©   (2010-04-08 09:35) [10]

> Засада в том, что eoAsyncFetch отпускает главный процесс только тогда, когда на стороне сервера набор получен полностью.
да ну, а зачем он тогда нужен?... режим повторяющий открытие с клиентским курсором. кто то ошибается, либо ты, либо мелкософт и его справка... (на кого ставим?)

> Хотел получить нечто среднее, т.е. во время выполнения запроса юзер мог бы передвигать окно + анимированное окно,
> НО в то же время никаких записей в гриде.
изучай дальше

> eoAsyncFetchNonBlocking + DBGrid.DataSource = nil - не вариант.
почему нет? хотя неважно, есть и другие способы добиться того же, и не один.


 
Anatoly Podgoretsky ©   (2010-04-08 10:14) [11]

> Беликов А.А  (08.04.2010 09:19:09)  [9]

А ты чего хочешь, что бы он на полпути бросил, мол дальше докачивайте ручками, носите в ведрах.


 
sniknik ©   (2010-04-08 10:47) [12]

> А ты чего хочешь, что бы он на полпути бросил, мол дальше докачивайте ручками, носите в ведрах.
ну, клиентский рекордсет в похожем режиме именно так и делает... нужно вызывать функцию для получения следующей порции данных (т.е. получается ближе к чисто серверному курсору, но фетч порциями).

но тут не так, тут он просто не разобрался с управлением...


 
Dennis I. Komarov ©   (2010-04-08 10:49) [13]


> Хотел получить нечто среднее, т.е. во время выполнения запроса
> юзер мог бы передвигать окно + анимированное окно, НО в
> то же время никаких записей в гриде.

Бросте заниматься бредом. Оно ни Вам, ни бедным пользователям не нужно...


 
Sergey13 ©   (2010-04-08 10:53) [14]

> [2] Беликов А.А,   (07.04.10 20:52)
> Идея в том, чтоб во время выполнения запроса можно было
> нормально перерисовывать окно и например показывать красивое
> анимированное окно шоб юзеру скушно не было.

Может стОит просто запрос оптимизировать?


 
sniknik ©   (2010-04-08 11:04) [15]

> Может стОит просто запрос оптимизировать?
очевидные вещи приходят только с опытом... да и то не всем.

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


 
Демо ©   (2010-04-09 11:30) [16]


> Беликов А.А,   (07.04.10 20:05) 
> Хочу реализовать открытие датасета в отдельном потоке.Делаю
> связку ADOConnection + ADOQuery + DataSource + DBGrid.ADOQuery.
> Open запускаю в отдельном потоке.На тестовом примере ошибок
> не обнаружено.Какие могут возникнуть проблемы?


Судя по всему - тестовый пример был написан не корректно.

Проблемы возникнут с синхронизацией.

ADOConnection + ADOQuery создаются в отдельном потоке?

DataSource + DBGrid.ADOQuery - VCL-компоненты, для которых нужна синхронизация (что невозможно).



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.057 c
3-1242392291
denis24
2009-05-15 16:58
2010.08.27
обрыв канала связи,выключение сервера


15-1269419887
begemot
2010-03-24 11:38
2010.08.27
Как гос.организации приобрести DELPHI?


2-1271858675
DROWSY
2010-04-21 18:04
2010.08.27
Компонент для выбора числового значения.


15-1265186248
Mike Kouzmine
2010-02-03 11:37
2010.08.27
Глобальное Затемнение


8-1204201324
ERT
2008-02-28 15:22
2010.08.27
PrintScreen