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

Вниз

Потокобезопасно ли ADO?   Найти похожие ветки 

 
Pit   (2013-04-30 15:15) [0]

Иными словами, если есть один TADOConnection, можно ли к нему параллельно обращаться из разных потоков со своими TADOQuery, допустим?


 
Компромисс1 ©   (2013-04-30 15:19) [1]

Each thread needs to have its own connection object. The following link provides more information: http://delphi.about.com/od/kbthread/a/query_threading.htm

Some key points from the article:

1] CoInitialize and CoUninitialize must be called manually before using any of the dbGo objects. Failing to call CoInitialize will result in the "CoInitialize was not called" exception. The CoInitialize method initializes the COM library on the current thread. ADO is COM.

2] You cannot use the TADOConnection object from the main thread (application). Every thread needs to create its own database connection.


http://stackoverflow.com/questions/3266532/ok-to-use-tadoconnection-in-threads


 
Pit   (2013-04-30 15:40) [2]

странно как-то... 50 поток - значит, надо делать 50 коннектов к базе?
Некоршено как-то...

А с чем связано ограничение? Если прикрутить фичу, что ОДНОВРЕМЕННО два запроса не будет исполняться - можно ли использовать TADOConnection из разных потоков?


 
Ega23 ©   (2013-04-30 15:46) [3]


> странно как-то... 50 поток - значит, надо делать 50 коннектов к базе?


Зачем? Пул коннектов - и нет проблем.


 
Pit   (2013-04-30 15:51) [4]


> Пул коннектов - и нет проблем.

то есть, ответ на мой пост [2] - утвердительный?

Если прикрутить фичу, что ОДНОВРЕМЕННО два запроса не будет исполняться - можно ли использовать TADOConnection из разных потоков?


 
sniknik ©   (2013-04-30 16:04) [5]

без асинхронной работы нет одновременного выполнения, с асинхронной свои потоки "под запросы" не нужны...


 
DVM ©   (2013-04-30 16:04) [6]


> Pit   (30.04.13 15:51) [4]


> можно ли использовать TADOConnection из разных потоков?

Чтобы ответить на данный вопрос достаточно поглядеть код TADOConnection. Там куча ресурсов никак не защищены от одновременного обращения из разных потоков, следовательно, TADOConnection не потокобезопасный класс.


 
Pit   (2013-04-30 16:11) [7]


> с асинхронной свои потоки "под запросы" не нужны...

под запросы нет. Но поток может выполнять задачу, а в какой-то момент времени ему нужно обратиться к БД.


 
Ega23 ©   (2013-04-30 16:23) [8]


> под запросы нет. Но поток может выполнять задачу, а в какой-
> то момент времени ему нужно обратиться к БД.


1. Создай свой собственный коннект
2. Используй свободный коннект в пуле.
3. Третьего не дано.


 
Pit   (2013-04-30 17:10) [9]

Ega23, да понятно. Вопрос был в том, что ничего страшного, если DBConnection был создан в одном потоке, а Query связанный с ним выполняется в другом?


 
Ega23 ©   (2013-04-30 17:31) [10]


> Вопрос был в том, что ничего страшного, если DBConnection
> был создан в одном потоке, а Query связанный с ним выполняется
> в другом?

Может и быть, CoInitialize надо на тред делать


 
Pit   (2013-04-30 17:37) [11]


> CoInitialize надо на тред делать

ну эт понятно...



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

Форум: "Прочее";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.003 c
15-1367320515
Pit
2013-04-30 15:15
2013.10.06
Потокобезопасно ли ADO?


3-1293263111
dik59
2010-12-25 10:45
2013.10.06
Создание домена


6-1269002359
eu1bc
2010-03-19 15:39
2013.10.06
Компоненты TNMMsg и TNMMsgSer


2-1358661812
N.Cage
2013-01-20 10:03
2013.10.06
Как убрать символы переноса в ячейке StringGrid


2-1358524343
Proshka
2013-01-18 19:52
2013.10.06
Строки после обновления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский