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

Вниз

ADOConnection.Open в сервисе   Найти похожие ветки 

 
gunner   (2003-01-16 11:33) [0]

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


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

вызвать его!

CoInitialize(nil);
....
CoUnInitialize;



 
Anatoly Podgoretsky ©   (2003-01-16 11:49) [2]

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


 
sniknik ©   (2003-01-16 12:21) [3]

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


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

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


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

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


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

Честно говоря в хелпе я ничего не нашёл про это !
Нашёл на 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;


 
sniknik ©   (2003-01-16 12:36) [7]

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


 
sniknik ©   (2003-01-16 12:39) [8]

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


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

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


 
sniknik ©   (2003-01-16 12:46) [10]

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


 
sniknik ©   (2003-01-16 12:49) [11]

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


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

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


 
Anatoly Podgoretsky ©   (2003-01-16 12:55) [13]

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

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

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

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


 
sniknik ©   (2003-01-16 13:05) [14]

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

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



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

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


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

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



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

Текущий архив: 2003.02.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
3-4809
Nuclear
2003-01-17 14:13
2003.02.03
Автоинкрементное поле в Access


3-4762
Lola
2003-01-16 13:14
2003.02.03
скроллинг в DBGrid


6-5106
brestmarket
2002-11-07 02:37
2003.02.03
Отправка emails через SMTP-сервер авторизации?


6-5097
Nord-Ost
2002-12-07 07:57
2003.02.03
Как отловить параметры?


14-5190
Думкин
2003-01-13 06:22
2003.02.03
Образование и общ...... 5?