Форум: "Базы";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c