Форум: "Начинающим";
Текущий архив: 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.081 c