Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

Как обратиться к 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
10-1037617973
Comwad
2002-11-18 14:12
2004.09.12
Почему неуклонно растет память приложений клиента и сервера в D7?


3-1092345624
sashapont
2004-08-13 01:20
2004.09.12
Необходимые библиотеки


1-1093429332
P@vel
2004-08-25 14:22
2004.09.12
Bufer


14-1093002926
Тупой
2004-08-20 15:55
2004.09.12
Где можно скачать книги по Delphi 7",


1-1093537096
mouse_web
2004-08-26 20:18
2004.09.12
Разбивка String