Форум: "Базы";
Текущий архив: 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