Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.061 c
2-1267947335
tippa
2010-03-07 10:35
2010.08.27
по структуре LVITEM


2-1273322142
Родион
2010-05-08 16:35
2010.08.27
переписать из с++ в делфи


2-1269966073
Dr. Genius
2010-03-30 20:21
2010.08.27
Формат даты вида "30 марта 2010 года"


2-1267601181
Гость
2010-03-03 10:26
2010.08.27
Упростить выражение


8-1204132089
AntonUSAnoV
2008-02-27 20:08
2010.08.27
Хочу сделать не знаю как ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский