Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-5023
Danik
2003-01-23 20:39
2003.02.03
Как узнать дату???


1-5043
Юрий Федоров
2003-01-23 19:50
2003.02.03
Вопрос глупый, но что-то никак не могу сообразить:


1-4851
BALU1111
2003-01-22 14:10
2003.02.03
Паскалевские функции работы с файлами


1-4858
viper
2003-01-24 17:55
2003.02.03
ListView and TreeView


1-4974
Fill
2003-01-27 08:24
2003.02.03
Уважаемые мастера, помогите, ворос по Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский