![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Компоненты ADO в консольном приложении [D6, IB6.x, MSSQL]
iZEN © (2002-11-15 12:08:00)Компоненты ADO в консольном приложении. :[
Возможно ли такое в принципе?
Столько времени уже пробую создать консольное приложение, где в run-time инстанцируются компоненты TADOConnection и TADOQuery.
Создаются нити на основе TThread, в которые передаются экземпляры этих компонентов и они начинают работу (должны начать - в оконном приложении так всё и происходит).
Далее, основную нить консольного приложения "зацикливаем":
...
{$APPTYPE CONSOLE}
...
var
Connection: TADOConnection;
Query: TADOQuery;
Writer: TWriterTask;//Дочерняя нить
...
begin
Connection := TADOConnection.Create(nil);
Query := TADOQuery.Create(nil);
Query.Connection := Connection;
Writer := TWriterTask.Create();
Writer.FreeOnTerminate := True;
Writer.SetConnection(Connection);
//---Стартуем нить
Writer.Resume();
...
//Зацикливаем главную нить (бесконечно)
while (True) do begin Sleep(2000); end;
//Завершение работы приложения
...
end.
Компиляция происходит нормально. А на запуске происходит облом в строчке:
Connection := TADOConnection.Create(nil);
Как это побороть?
P.S. И с сервисом та же проблема: не хотят инстанцироваться компоненты ADO :((
iZEN (2002-11-15 14:28:00) [1]Спасибо, разобрался (подсказали на RSDN).
С консольным приложением разобрался, а с сервисом никак - останавливается, зараза, нечего ему делать, видите ли. :(
iZEN (2002-11-15 13:26:00) [2]Подскажете, какой модуль подключить к проекту консольного приложения, чтобы можно было вызвать CoInitialize(nil); ?
asmith (2002-11-15 12:51:00) [3]Ты не можешь работать с ADO потому, что не инициализирована среда COM. В обычной аппликации это делает строка
Application.Initialize;
dpr-файла. Так что перед Connection := TADOConnection.Create(nil); поставь вызов CoInitialize(nil);
а после //Завершение работы приложения
вызови CoUninitialize();