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

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

ADOConnection.Open в сервисе [D7]


gunner ©   (2003-01-16 11:33:00) 

При попытке установления соеденения с базой ADOConnection.Open
возникает exception "Необходимо вызвать CoInitialize"
Что это и как с этим бороться !??
Заранее спасибо !


Delirium   (2003-01-16 14:54:00) [1]

Рекомендую для прочтения:
http://nps.vnet.ee/ftp/Docs/Delphi/DX/COMmodel.html


asmith   (2003-01-16 14:20:00) [2]

И не забывать делать инициализацию среды СОМ для каждого созданного потока, использующего сервисы СОМ! Лучше в методе Execute. Можно в сервисе вызвать инициализацию ДО создания дополнительного потока и ADO не захочет работать.


sniknik   (2003-01-16 13:05:00) [3]

странно, у меня таких проблем не было.

но может тебе компоненты ADO-шные попробовать в рантайме создавать? во избежание внутренних действий что дельфи по умолчанию делает. так примерно
procedure TTrfService.ServiceExecute(Sender: TService);
Begin
CoInitialize(nil);
ADOConnection:= TADOConnection.Create(nil);
...
ADOCommand:= TADOCommand.Create(nil);
...
ADOCommand.Execute; // .Open; ??? странно
.
.
CoUnInitialize;
end;


Anatoly Podgoretsky   (2003-01-16 12:55:00) [4]

gunner (16.01.03 12:35)
Тема в хелпе так и называется, но MSDN конечно более полный

gunner (16.01.03 12:26)
Конечно же я Вызывал его....

Не видать, обманываешь или показывать нам не хочешь тот кусок

gunner (16.01.03 12:40)
Зря ты хелп не прочитал, так сказано, что можно несколько раз и как с этим бороться. Также сказано в каких случаях его вызывать нельзя.


gunner   (2003-01-16 12:51:00) [5]

Да нет... конект закрыт...
собственно с этого и начался весь этот бардак...
всё прекрастно работает если скомпилить сервис с уже открытым коннектом если же я его пытаюсь в ручную уже из прилады вызвать, то он не даётся !


sniknik   (2003-01-16 12:49:00) [6]

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


sniknik   (2003-01-16 12:46:00) [7]

очень логично, хелп ->
...call CoInitialize before they make any other COM library calls


gunner   (2003-01-16 12:40:00) [8]

> sniknik ©
Я его не запускал.. но верю тебе наслово !
Вообще CoInitialize должно вызываться один раз ещё до вызова конструкторов ADO компонент... поэтому вызывать его перед Open помоему не в полне логично !


sniknik   (2003-01-16 12:39:00) [9]

внеси небольшие изменения
procedure TTrfService.ServiceExecute(Sender: TService);
Begin
CoInitialize(nil);
ADOCommand.Open;
.
.
.
.
.
.
CoUnInitialize;
end;


sniknik   (2003-01-16 12:36:00) [10]

а пример смотрел? работает? там тоже самое только + работа с базой через dll.


gunner   (2003-01-16 12:35:00) [11]

Честно говоря в хелпе я ничего не нашёл про это !
Нашёл на MSDN !
А Пример кода вот:

type
TTrfService = class(TService)
Connection: TADOConnection;
GetTargetIP: TADOQuery;
Timer: TTimer;
ResetBuffer: TADOCommand;
UpdateFilter: TTimer;
CheckSnmp: TTimer;
GetCntSnmp: TADOQuery;
ListNases: TADOQuery;
ResetCounters: TADOStoredProc;
procedure ServiceExecute(Sender: TService);
procedure TimerTimer(Sender: TObject);
procedure UpdateFilterTimer(Sender: TObject);
procedure CheckSnmpTimer(Sender: TObject);
private

procedure TTrfService.ServiceExecute(Sender: TService);
Begin
ADOCommand.Open;
.
.
.
.
.
.
end;


Anatoly Podgoretsky   (2003-01-16 12:28:00) [12]

Значит не так или не там, но мы не телепаты, а хелп то ты посмотрел, так все прекрасно расписано, что это такое и для чего.


gunner   (2003-01-16 12:26:00) [13]

Конечно же я Вызывал его.... эта мысль пришла мне на ум первой..но это не помогло..после этого он всёравно пишет что необходимо вызвать CoInitialize(nil);


sniknik   (2003-01-16 12:21:00) [14]

толко что положил пример в кладовку, можеш посмотреть
http://delphi.mastak.ru/cgi-bin/download.pl?look=1&id=1042708779&n=1


Anatoly Podgoretsky   (2003-01-16 11:49:00) [15]

Ну и что тебя сдерживает выполнить эту рекомендацию?


sniknik   (2003-01-16 11:38:00) [16]

вызвать его!

CoInitialize(nil);
....
CoUnInitialize;


Наверх

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