Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Достаточно ли одного ADOConnection?


leklerk ©   (2012-03-06 13:08:00) 

У меня в программе для двух ADODataSet и двух ADOCommand используется один ADOConnection. Можно так делать или нужно для каждого ADODataSet и ADOCommand создавать свой ADOConnection?


Alex_C   (2012-03-07 15:04:00) [1]


> одного LogConnection удалить запись


Вру! :) Все работает! Вопрос снимается... До следующих Вопросов! :)


Alex_C   (2012-03-07 14:48:00) [2]


> Кури про транзакции и уровни их изоляции.


Сейчас посмотрел в чем был вопрос:
если из одного LogConnection удалить запись, то в другом она все равно остается видимой. При вставке записи - все ок!


Ega23   (2012-03-07 13:57:00) [3]


> как лечить оранжевую чупакабру


Чупакабра не бывает оранжевой. На самом деле это супермутант со вколотым селсом, который обитает за камушком на юго-востоке от Новака.


Anatoly Podgoretsky   (2012-03-07 13:17:00) [4]

> DVM  (07.03.2012 12:38:12)  [12]

Потоко безопасность обеспечивается правильным использованием.


DVM   (2012-03-07 12:38:00) [5]


> Alex_C   (07.03.12 10:05) [9]


> но вроде как MS писала, что связка ADO+Access является потокозащищенной.
>  

Если даже так, то все равно TAdoConnection не потокобезопасен.


sniknik   (2012-03-07 12:05:00) [6]

>> при использовании нескольких ADOConnection  возникают проблемы
>> видимости добавленных/измененных записей через разные ADOConnection.
> Не возникает никаких проблем.
+1

> Сейчас на вскидку статью не найду, но вроде как MS писала, что связка ADO+Access является потокозащищенной.
а постарайся, может ты что не так так понял. (там есть свои потоки, асинхронность, это да. а вот как может быть защищенной связка из разных внешних потоков, при том что для модели COM нужна инициализация каждого отдельно. объекты полностью изолированны со своими переменными, и вообще возможно отдельными базами...  ну в общем хотелось бы посмотреть первоисточник.)

> Я тут некоторое время назад спрашивал, как такие проблемы решить, но так ответа и не получил.
потому и не получил.
а какой ответ дал бы ты сам, на вопрос к примеру "как лечить оранжевую чупакабру"?


Ega23   (2012-03-07 10:38:00) [7]


> при использовании нескольких ADOConnection  возникают проблемы
> видимости добавленных/измененных записей через разные ADOConnection.


Не возникает никаких проблем. Кури про транзакции и уровни их изоляции.


Alex_C   (2012-03-07 10:05:00) [8]


> см. обоснование:


Прочитал. Спасибо! Но тут , по моему вступает в действие


> Смотря какая СУБД.


Сейчас на вскидку статью не найду, но вроде как MS писала, что связка ADO+Access является потокозащищенной.

Вообще на самом деле почему такой вопрос возникает: одно ADOConnection использовать, или несколько: опять же применительно к связке ADO+Access при использовании нескольких ADOConnection  возникают проблемы видимости добавленных/измененных записей через разные ADOConnection.
Я тут некоторое время назад спрашивал, как такие проблемы решить, но так ответа и не получил.


Loginov Dmitry   (2012-03-06 23:24:00) [9]


> Сколько не пытался получить проблему при использовании одного
> ADOConnect'а из нескольких тредов - не получалось.


Нельзя одновременно из нескольких потоков работать с одним компонентом-подключением!
см. обоснование:
http://www.loginovprojects.ru/index.php?page=threadsafedb


DVM   (2012-03-06 23:05:00) [10]


> Alex_C   (06.03.12 18:07) [3]


> Сколько не пытался получить проблему при использовании одного
> ADOConnect'а из нескольких тредов - не получалось.

Это проще простого организовать, даже я бы сказал элементарно. Много раз наблюдал. Ничего страшного причем не случается (по крайней мере на SQL сервере), ADO сыпет ошибками в которых говорится что-то про подключения из разных потоков и утечки памяти иногда возникают. Чтобы сие получить надо множество потоков (штук 10 например) и более одного ядра на процессоре.


Ega23   (2012-03-06 21:26:00) [11]


> Сколько не пытался получить проблему при использовании одного
> ADOConnect'а из нескольких тредов - не получалось.


Просто повезло.
Это как с
try
 obj := TSomeObject.Create;
 ...
finally
 obj.free;
end;
 

В некоторых случаях - нарвёшься. В некоторых - нет. Рисковать - выбор за тобой.
Ну и таки да, ADOConnection - COM-объект.


sniknik   (2012-03-06 19:50:00) [12]

> Например явная ошибка в  MS Aсcess (ядро JET):
нет там ошибки, просто нужно помнить что каждое соединение это COM объект, ну и то что чудес не бывает.


stas   (2012-03-06 19:14:00) [13]

Alex_C   (06.03.12 18:07) [3]
Смотря какая СУБД. я как-то приводил примеры.

Например явная ошибка в  MS Aсcess (ядро JET): чтобы получить последний ID нужно выполнить запрос Select @@IDENTITY  при этом ты получаешь последний ID в пределах подключения. Естественно если у тебя 10 потоков, то ты не сможешь узнать в каждом потоке ID последней вставленной записи.


Alex_C   (2012-03-06 18:07:00) [14]


> При работе с БД из нескольких тредов


Вот этот бы момент еще до конца просвятить. :)
Сколько не пытался получить проблему при использовании одного ADOConnect'а из нескольких тредов - не получалось.
Так надо все же или это рекомендательный характер носит совет?


Ega23   (2012-03-06 13:54:00) [15]

"Свой" ADOConnection имеет смысл создавать:
а) При обращении к "другой" БД
б) При работе с БД из нескольких тредов (либо по своему коннекту на тред, либо общий пул коннектов).
В 95% случаев достаточно одного единственного соединения.
Даже в 99%. :)


stas   (2012-03-06 13:27:00) [16]

Достаточно одного.


Наверх

Титульная страница Поиск, карта сайта Написать письмо