Главная страница
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.017 c
1-4874
trotski
2003-01-24 22:12
2003.02.03
RichEdit


1-4865
Nikolai_S
2003-01-24 17:44
2003.02.03
Как использовать функцию LineDDA?


1-5003
IgorKuz
2003-01-23 16:15
2003.02.03
Как правильно использовать Команду MOVE ?


1-4956
dvm
2003-01-26 16:09
2003.02.03
Аналог в Делфи операции из Си


14-5234
Sergey13
2003-01-15 13:31
2003.02.03
Возможен ли в России культ личности ВВП?