Главная страница
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.053 c
2-1274110353
demon
2010-05-17 19:32
2010.08.27
Перекодировка из &#xxxx; в удобочитаемый


2-1266319857
oleg1963lora
2010-02-16 14:30
2010.08.27
Вопросы по юникоду


15-1265188639
12
2010-02-03 12:17
2010.08.27
Тем, кто работал с Oracle и MSSQL. C чем Вам удобнее показалось?


4-1238744433
SunSh@dow
2009-04-03 11:40
2010.08.27
выключить монитор


4-1235052387
GanibalLector
2009-02-19 17:06
2010.08.27
WMI & Delphi