Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Вниз

Ошибка работы с потоком (CoInitialize...)   Найти похожие ветки 

 
DAO   (2002-07-22 21:02) [0]

Пытаюсь открыть поток в котором вызываю функцию соединения с сервером БД через ADO, а он возвращает ошибку мол надо вызвать CoInitialize...
Че за херь? Как ее избежать и вообще что делать? Помогите!!!


 
Anatoly Podgoretsky   (2002-07-22 21:34) [1]

А рекомендацию выполнить не хочешь?
Послушайся совета.


 
DAO   (2002-07-23 22:08) [2]

Дык дело вообще то не в совете!!! Смысл вопроса в том что коннект то пройсходит нормально из формы! А из потока нет!!! И никаких инициализации я немогу сделать так как незнаю какую библиотеку COM надо инициализировать... И потом придеться ее грузить явно посредством LoadLibrary! А это уже гон!!! Поэтому я прошу о помощи! А вообще хорошо бы если бы дали ссылку на пример как надо правильно коннектиться к БД с многопоточным делом!


 
Suntechnic   (2002-07-23 22:20) [3]

Ну тебе ж уже чёрным по белому написали послушайся совета. А если не хочешь слушать совета читай хелпы:

CoInitialize must be called at least once, and is usually called only once, for each thread that uses the COM library.

По-русски это означает что любой поток, который хочет делать вызовы ф-ций из библиотеки COM должен вызвать CoInitialize.


 
DAO   (2002-07-23 22:37) [4]

Так это не просто CoInitialize... Я эту функцию то знаю!!! Она предназначена для загрузки COM библиотек!!! Причем надо знать в качестве параметре хэндл библиотеки... А какой библиотеки??? Как она называеться в случае ADO!!! Вот в чем вопрос!!!


 
Suntechnic   (2002-07-23 23:20) [5]

Я что то не понял какой параметр и какой библиотеки?
HRESULT CoInitialize(
LPVOID pvReserved //Reserved, must be NULL
);


Дык о каком параметре идёт речь?


 
DAO   (2002-07-23 23:28) [6]

Кстати, а из какого модуля его надо вызывать?


 
Suntechnic   (2002-07-23 23:34) [7]

Что значит из какого модуля? :0 Она вызывается для каждого нового потока, следовательно должа вызываться из контекста этого потока. Так что из какого модуля тебе должно быть видней.


 
Polevi   (2002-07-23 23:38) [8]

TSomeThread.Execute
begin
CoInitialize
try

..

finally
CoUninitialize
end;
end;


 
DAO   (2002-07-23 23:45) [9]

А вот в том то и все дело что он не понимает!!! Говорит undeclared identifier... Поэтому я спрашиваю из какого модуля? Ну где его определение? Или может это функция DLL тогда какая DLL?


 
Suntechnic   (2002-07-23 23:50) [10]

Выражаться надо яснее...
У меня на машине Delphi нет, так что помочь не могу, но думаю найдутся добрые люди.


 
DAO   (2002-07-23 23:53) [11]

Ааа....... Ну вообще то я думал раз форум.. Да не то что форум сайт посвящен Delphi то у всех он есть ну и т.д. А ты откуда про нее вычитал? Может написано как ее вызывать? Скажи плиз...


 
Suntechnic   (2002-07-23 23:58) [12]

Как её вызывать тебе подробно рассказали. Я тебе ещё подробнее могу рассказать в каком заголовочном файле С++ она описана и какой lib подключить надо, но боюсь тебе это будет не сильно интересно. Где я про неё вычитал? Дык известно где: MSDN - источник знаний всех времён и народов :)


 
DAO   (2002-07-24 00:06) [13]

Как раз то мне этот lib и нужен!!! И желательно название *.h файла!!! Плиз... Может в чат выдем? Там удобнее


 
Polevi   (2002-07-24 00:11) [14]

uses ActiveX


 
DAO   (2002-07-24 00:15) [15]


> Polevi © (24.07.02 00:11)
> uses ActiveX


Большой сэнкс!!! Вот чего я ждал так долго!!! Попробую доделать прогу... Надеюсь все будет ок, иначе опять придеться сдесь торчать!


 
Anatoly Podgoretsky   (2002-07-24 00:15) [16]

Я могу подсказать как поступать, если хелп не помогает, то в Виндоус есть клавиша Win+F


 
Suntechnic   (2002-07-24 00:21) [17]

DAO © (24.07.02 00:06)
Я что-то не понял тебе модуль нужен или h файл с lib? :)
По чатам шляться не могу... на работе я...


 
DAO   (2002-07-24 10:35) [18]

Да нет все уже сэнкс! Все работает! Теперь другой вопрос появился вчера ночью! Вернее проблема..

Короче это все я делал для того что бы в программе коннект к БД шел параллельно в отдельном потоке! Теперь такой трабл! Когда я в окне ожидания соединения нажимаю на кнопку Cancel он выполняет следующее ConnectThread.Terminate и выходит из этой формы. Я думал все ок пока не увидел что через секунд 10 ответ все таки вернулся от сервера, зотя по илей потока уже нет!
Вопрос: Как сделать так что бы ответ или не возвращался? Или мне кажеться второй вариант это то что Terminate ждет до выполнения потока - Тогда как сделать немедленное уничтожение?
Если можно то полность фрагментик, потому что допустим ответ типа TerminateThread не подходит! Так как там надо еще много что делать для грамотного освобождения ресурсов! Плиз, подскажите!


 
Suntechnic   (2002-07-24 15:41) [19]

А ответ на это вопрос простой и однозначный в твоёи конкретном случае: никак! Нет оно то конечно можно через TerminateThread, но это будет издевательство над системой и сервером БД.
Для того чтобы прервать выполнение SQL запроса его надо запустить в асинхронном режиме. Насколько я знаю ADO позволяет такую штуку сделать, но я на все 100% не уверен, так что покопайся сам.


 
DAO   (2002-07-24 20:00) [20]

Specifies whether a connection is synchronous or asynchronous.

property ConnectOptions: TConnectOption;

Description

Set ConnectOptions to specify whether the connection established by the TADOConnection is synchronous or asynchronous. The default value for ConnectOptions is coConnectUnspecified.

An application will typically use the default of a synchronous connection (coConnectUnspecified). Typically an asynchronous is only really needed to compensate for a slow server.

Тут написано что это для медленных серверов... Может ты спутал? Хотя попробывать стоит...


 
Suntechnic   (2002-07-24 20:20) [21]

Понятие синхронный/асинхронный никакого отношения к скорости серверов не имеет. Ты это откопал св-во соединения, а тебе вообще то надо это для самого запроса. Я такую штуку делал(прерывание запроса, запущенного асинхронно), но это было на ODBC API. ADO более продвинутая технология, так что там это тоже должно быть и путать тут особенно нечего.


 
DAO   (2002-07-24 20:29) [22]

А там другого нет... Только это! И кстати, прошу заметить: я речь вел не запросе, а как раз таки о соединении... Запросы я реализую без потоков!



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

Форум: "WinAPI";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
14-50977
nic418
2002-08-22 12:13
2002.09.16
ротвейлер


1-50725
Незнайка
2002-09-05 14:27
2002.09.16
Таблицы в RichEdit


1-50806
mvg_first
2002-09-03 14:59
2002.09.16
Подскажите компонент для записи видео с видеовхода


1-50784
maxim2
2002-09-03 14:20
2002.09.16
Можно ли сделать многострочный Label а если можно то как?


14-50951
pkm
2002-08-20 21:18
2002.09.16
Сеть!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский