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

Вниз

Как обратиться к Default ADOConnection?   Найти похожие ветки 

 
Aleksandr.   (2004-08-13 14:09) [0]

Под Default я имею в виду, что при создании ADODataSet ему можно указать свойством Connection компонент TADOConnection, а можно в свойство ConnectionString записать параметры соединения и коннектиться он будет через какое-то системное соединение (если по аналогии с TSession). Вот у меня бывает проблема - один объект для различных операций создает и отдает другим потокам объекты TADOQuery (которые в них затем и уничтожаются), а для связи им прописывает ConnectionString (пробовал сначала для них назначать свойство Connection, указывая туда ADOConnection выделяющего объекта, но что-то там какие-то ошибки OLE полезли). Так вот, если SQL-server рестартануть, то все ADODataSet, имеющие свой TADOConnection, восстанавливают подключение пересозданием этого объекта, а все ADODataSet, пытающиеся соединиться через строку подключения, связь установить не могут. То есть, насколько я понимаю, в программе остается висеть какой-то динамический ADOConnection, который никак не переинициализируется. Через что можно к нему обратиться?


 
strelok-47   (2004-08-13 14:15) [1]

Связь не могут установить как? Ты их закрывешь-открываешь и они не могут?


 
46_55_41_44 ©   (2004-08-13 14:22) [2]

Слушай... В ADOQuery тоже есть Connection... И там тоже можно установить TADOConnection... и все...
Я например никогда в ADOQuery ConnectionString ну использую... зачем? Тогда всякая надобность ADOConnection отпадает!!! Бросаешь в датамодулт например 1 ADOConnection.. и все...всем ADOQuery или любым другим TADODataset устанавливаешь Connection := ADOConnection;
Я делаю так...
прекрасно работает... никаких тебе проблем!


 
Aleksandr.   (2004-08-13 14:36) [3]

strelok-47 :
Не могут. Закрываешь-открываешь - не могут. Ошибка "Connection destroyed", а вот откуда они ее берут, хрен знает. Если параллельно создать объект ADOConnection с той же строкой подключения, то он прекрасно восстановит соединение (свое), а те, которые со строкой - так и останутся.

46_55_41_44 :
Я же объяснил, что сначала пытался тоже для каждого ADOQuery выделить свой объект ADOConnection, но очень быстро начались проблемы с Ole. Да и не удивительно, если около 100 датасетов начинают дергать свое соединение. А что до DataModule - так программа не того уровня. Она многопоточная плюс консольная.


 
sniknik ©   (2004-08-13 15:23) [4]

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

выделять для каждого квери свой конект необязательно, и лишнее(а у тебя так и происходит, если строкой то конект создается автоматически), достаточно конект один на поток. проблем с OLE быть не должно.

насчет ошибки "Connection destroyed", хотя ADO и делает резервирование ресурсов (прим. до 3 мин), чтобы частые подключения не тормозили, но это похоже не тот случай. наоборот это при клиентская часть (программа) выдает, такое впечатление что сервер (ядро ADO) уже рухнул/завершился, а к нему еще по старым конектам обращаются...
т.е. ищи глюк в программе, чтото ты не то делаеш. поток к примеру дестроиш вместо нормального завершения, или модель com (coinitialize) инициализировал но не закрыл, или наоборот открыл один раз закрыл два. и т.д. полный простор для воображения.
но вот что точно к "дефоултному" по твоему (первый открытый, т.к. они равноправны) обьекту тебе лезть не стоит, да и его может вполне просто не быть уже.


 
46_55_41_44 ©   (2004-08-13 15:49) [5]


> ADOQuery выделить свой объект ADOConnection

Это уже слишком??? зачем??? у меня порядка 100 ADOQuery... Если не больше... и все работают с одним единственным ADOConnection...
Еще один будет нужен, если подключиться к другой базе!
Но всего один на каждую БД, что тоже не обязательно, но все-таки лучше так, чтобы не запутаться!!!


 
Aleksandr.   (2004-08-13 17:29) [6]

Дык елки-палки, у меня сто потоков, у каждого ADOQuery либо имеется один, либо для каких-то действий создается временный (впрочем, последних всего пять, но с ними проблема и есть - ). Execute у каждого:
 Coinitialize(nil);
 try
   InitConnections;
   repeat
     Do...
   until Terminated
   DoneConnections
 finally
   Couninitialize
 end


 
sniknik ©   (2004-08-13 20:35) [7]

> у меня сто потоков
чтото не так датском королевстве. ;о))

зачем в одной программе столько потоков? (просто не могу представить, хотя делал и больше (2000) но это для только теста, а вот в рабочей программе? зачем? максимум было пять (собственных, то что там компоненты создавали, ну типа инди сеть слушает, и т.д. не в счет))

> либо для каких-то действий создается временный (впрочем, последних всего пять, но с ними проблема и есть - )
вот, это уже интересно, создается, и именно с ними проблемы... на чтото это намекает... только вот на что? явно чегото в вопросе не хватает. чего? хм...


 
KSergey ©   (2004-08-14 09:37) [8]

> [5] 46_55_41_44 ©   (13.08.04 15:49)
>
> > ADOQuery выделить свой объект ADOConnection
>
> Это уже слишком??? зачем??? у меня порядка 100 ADOQuery...
> Если не больше... и все работают с одним единственным ADOConnection...

Вопрос внимательно перечитаем? У него все в отдельных потоках!
Из разных потоков через один Connection - нельзя. Вот и [4] sniknik ©   (13.08.04 15:23) о том же пишет.

Автору: а может посмотреть в сторону асинхронного выполнения запросов в ADO - и этого будет достаточно, вместо кучи потоков? Благо дельфийские обертки поддерживают это в достаточной мере.
Ой, только не спрашивайте как. Есть справка, есть прекрасные статьи, в частности - на "Королевстве".



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

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

Наверх




Память: 0.47 MB
Время: 0.036 c
1-1093847467
DesWind
2004-08-30 10:31
2004.09.12
Редактор свойств


14-1093064650
DelphiN!
2004-08-21 09:04
2004.09.12
Как откомпилировать приложение написанной на Делфи под WindowsSE?


1-1093712107
Черный дембель
2004-08-28 20:55
2004.09.12
Параметры функций из DLL


14-1093355242
saNat
2004-08-24 17:47
2004.09.12
DOS и Windows


6-1089138129
SergP
2004-07-06 22:22
2004.09.12
UDP. Как отослать пакет на диапазон адресов?





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