![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADOQuery и TThread
Беликов А.А, © (2010-04-07 20:05:00)Хочу реализовать открытие датасета в отдельном потоке.
Делаю связку ADOConnection + ADOQuery + DataSource + DBGrid.
ADOQuery.Open запускаю в отдельном потоке.
На тестовом примере ошибок не обнаружено.
Какие могут возникнуть проблемы?
Демо (2010-04-09 11:30:00) [1]
> Беликов А.А, (07.04.10 20:05)
> Хочу реализовать открытие датасета в отдельном потоке.Делаю
> связку ADOConnection + ADOQuery + DataSource + DBGrid.ADOQuery.
> Open запускаю в отдельном потоке.На тестовом примере ошибок
> не обнаружено.Какие могут возникнуть проблемы?
Судя по всему - тестовый пример был написан не корректно.
Проблемы возникнут с синхронизацией.
ADOConnection + ADOQuery создаются в отдельном потоке?
DataSource + DBGrid.ADOQuery - VCL-компоненты, для которых нужна синхронизация (что невозможно).
sniknik (2010-04-08 11:04:00) [2]> Может стОит просто запрос оптимизировать?
очевидные вещи приходят только с опытом... да и то не всем.
дайте человеку своих шишек понабивать, демонстрация чужих его не научит.
Sergey13 (2010-04-08 10:53:00) [3]> [2] Беликов А.А, (07.04.10 20:52)
> Идея в том, чтоб во время выполнения запроса можно было
> нормально перерисовывать окно и например показывать красивое
> анимированное окно шоб юзеру скушно не было.
Может стОит просто запрос оптимизировать?
Dennis I. Komarov (2010-04-08 10:49:00) [4]
> Хотел получить нечто среднее, т.е. во время выполнения запроса
> юзер мог бы передвигать окно + анимированное окно, НО в
> то же время никаких записей в гриде.
Бросте заниматься бредом. Оно ни Вам, ни бедным пользователям не нужно...
sniknik (2010-04-08 10:47:00) [5]> А ты чего хочешь, что бы он на полпути бросил, мол дальше докачивайте ручками, носите в ведрах.
ну, клиентский рекордсет в похожем режиме именно так и делает... нужно вызывать функцию для получения следующей порции данных (т.е. получается ближе к чисто серверному курсору, но фетч порциями).
но тут не так, тут он просто не разобрался с управлением...
Anatoly Podgoretsky (2010-04-08 10:14:00) [6]> Беликов А.А (08.04.2010 09:19:09) [9]
А ты чего хочешь, что бы он на полпути бросил, мол дальше докачивайте ручками, носите в ведрах.
sniknik (2010-04-08 09:35:00) [7]> Засада в том, что eoAsyncFetch отпускает главный процесс только тогда, когда на стороне сервера набор получен полностью.
да ну, а зачем он тогда нужен?... режим повторяющий открытие с клиентским курсором. кто то ошибается, либо ты, либо мелкософт и его справка... (на кого ставим?)
> Хотел получить нечто среднее, т.е. во время выполнения запроса юзер мог бы передвигать окно + анимированное окно,
> НО в то же время никаких записей в гриде.
изучай дальше
> eoAsyncFetchNonBlocking + DBGrid.DataSource = nil - не вариант.
почему нет? хотя неважно, есть и другие способы добиться того же, и не один.
Беликов А.А (2010-04-08 09:19:00) [8]Вы наверно имеете ввиду eoAsyncFetch или eoAsyncFetchNonBlocking...
Засада в том, что eoAsyncFetch отпускает главный процесс только тогда, когда на стороне сервера набор получен полностью.
А в случае eoAsyncFetchNonBlocking набор получает записи, а грид сразу начинает их отрисовывать.
Хотел получить нечто среднее, т.е. во время выполнения запроса юзер мог бы передвигать окно + анимированное окно, НО в то же время никаких записей в гриде.
eoAsyncFetchNonBlocking + DBGrid.DataSource = nil - не вариант.
p.s. Сервер MSSQL
MsGuns (2010-04-08 01:36:00) [9]>Беликов А.А, (07.04.10 20:52) [2]
>Если Сникник вы так не делаете, то у вас нет ответов, и тем не менее, у >кого был опыт - поделитесь
Сникник так не делает потому, что в этом нет никакой необходимости, т.к. само АДО использует потоки. Для Вашей задачи достаточно просто запускать запрос в асинхроноом режиме,- читайте справку по АДО, там все подробно написано.
Игорь Шевченко (2010-04-07 23:24:00) [10]Loginov Dmitry © (07.04.10 22:53) [6]
Свои
Loginov Dmitry (2010-04-07 22:53:00) [11]
> Клиент Oracle, например, предоставляет thread-safe клиентскую
> модель исполнения паралелльных запросов с одним подключением.
>
А какие компоненты подключения используете для работы с Oracle?
Игорь Шевченко (2010-04-07 22:47:00) [12]Loginov Dmitry © (07.04.10 22:41) [4]
Это все зависит от возможностей базы данных и ХХХ. Клиент Oracle, например, предоставляет thread-safe клиентскую модель исполнения паралелльных запросов с одним подключением.
Loginov Dmitry (2010-04-07 22:41:00) [13]
> На тестовом примере ошибок не обнаружено.
>
Значит еще возникнут. Насколько мне известно, компоненты TXXXConnection очень нежелательно использовать сразу в разных потоках. Одно подключение должно использоваться не более чем в одном потоке.
oldman (2010-04-07 21:47:00) [14]
> ADOQuery.Open запускаю в отдельном потоке.
Почему именно Open?
Беликов А.А, (2010-04-07 20:52:00) [15]Идея в том, чтоб во время выполнения запроса можно было нормально перерисовывать окно и например показывать красивое анимированное окно шоб юзеру скушно не было.
Если Сникник вы так не делаете, то у вас нет ответов, и тем не менее, у кого был опыт - поделитесь
sniknik (2010-04-07 20:46:00) [16]> Какие могут возникнуть проблемы?
разные... бессмысленные... никому не нужные... безответные... т.к. так не делают, а значит опыта их решения ни у кого нет.