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

Вниз

создание adoconnection и adoquery в потоке   Найти похожие ветки 

 
denis24   (2004-12-09 11:04) [0]

Помогите пожалуста.Возникла необходимость создавать в потоке сабж и делать запрос
Пишу

type
 TWorking_report_word = class(TThread)
 AdoQuery2:TADOQuery;
 Adoconnection:Tadoconnection;

procedure TWorking_report_word.Execute;
.
.
.
Adoconnection:=TADOConnection.Create(nil);
Adoconnection.ConnectionString:=DataModule2.ADOConnection1.ConnectionString;
Adoconnection.LoginPrompt:=false;
AdoQuery2:=TADOQuery.Create(nil);
AdoQuery2.Connection:=Adoconnection;
.
.
.
with  AdoQuery2 do
begin
    sql.Clear;
    sql.add("select * from tbl1 where id=1");

И тут виснет.Что я делаю не так?


 
clickmaker ©   (2004-12-09 11:25) [1]

CoInitialize в начале потока вызываешь?


 
denis24   (2004-12-09 11:37) [2]

Переписал

.
.
.
CoInitialize(nil);
Adoconnection:=TADOConnection.Create(nil);
Adoconnection.ConnectionString:=DataModule2.ADOConnection1.ConnectionString;
Adoconnection.LoginPrompt:=false;
Adoconnection.CursorLocation:=clUseServer;
Adoconnection.Connected:=true;

И после этого виснет


 
sniknik ©   (2004-12-09 11:55) [3]

> Adoconnection.ConnectionString:=DataModule2.ADOConnection1.ConnectionString;
вот это сделай как нибудь по другому, всетаки из другого модуля/потока строку тянеш.
(переопредели конструктор к примеру и передавай строку при создании потока ххх:= TWorking_report_word.Create(DataModule2.ADOConnection1.ConnectionString)? внутри сохраняеш и после используеш (проще чем дополнительно процедуру передачи делать и вызывать ее в сонхронизации)

и главное CoInitialize строго парами вызывают, если инициализировал значит и разынициализировать обязан (см. хелп по нему)


 
denis24   (2004-12-09 12:37) [4]

Вызываю конструктор
TWorking_report_word.Create1(true, DataModule2.ADOQueryArchiv,DataModule2.ADOConnection1.ConnectionString)

В конструкторе передаю переменной этот connectionstring,
constructor
TWorking_report_word.Create1(createsuspend:boolean;AdoQueryArchiv_main:Tdataset;path_db1:string);
begin
inherited Create(True);
 AdoQueryArchiv:=TDataSet.Create(nil);
 AdoQueryArchiv:=AdoQueryArchiv_main;
 path_db:=path_db1;
end;

затем connectionstring нового adoconnection=переменой
ADOConnection.ConnectionString:=path_db;
Пробую
Adoconnection.Connected:=true;
Переменная точно правильная.

Может из-за того что в datamodule.adoconnection1 открыт?


 
sniknik ©   (2004-12-09 15:31) [5]

не, скорее изза того, что тепер ты целый датасет извне теперь затаскиваеш...
AdoQueryArchiv:=TDataSet.Create(nil); //создали, зашибись пока правильно
AdoQueryArchiv:=AdoQueryArchiv_main;  //переписали созданое внешним  датасетом  
(теперь у нас есть один потерянный и два указателя на одни и те же методы/данные датасета к которым обращатся будеш из разных потоков)
сомневаюсь что это будет работать.


 
denis24   (2004-12-10 13:01) [6]

Ничего не понимаю.
Щас вообще ничего не передаю в поток

type
 TWorking_report_word = class(TThread)
 AdoQuery2:TADOQuery;
.
.
.
procedure TWorking_report_word.Execute;
.
.
begin
try
CoInitialize(nil);
AdoQuery2:=TADOQuery.Create(nil);
AdoQuery2.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\eva\eva1.mdb";
with  AdoQuery2 do
begin
         sql.Clear;
         sql.add("select * from tbl1 where id=1"// и тут виснет
end;
.
.
.

Вызываю поток  с главной формы так

with TWorking_report_word.Create(true),TfrmWorking_report.Create(nil) do
try
       FreeOnTerminate:=true;
       OnTerminate:=Working_ReportFinished ;
       resume;
       ShowModal;
finally
       free;
end;


 
denis24   (2004-12-10 17:41) [7]

никто не подскажет?


 
sniknik ©   (2004-12-11 00:07) [8]

> никто не подскажет?
а толку? тебе говорили вызовы парные должны быть инициализация/разынициализация, и...?

> [6]
конект автоматический,  LoginPrompt:=false; ему не поставиш а без этого виснет тоже (форма логина автоматически VCL-ая вызывается...).

> Working_ReportFinished
откуда ???

> finally
>        free;
> end;
одно? а создавал пару обьектов, и к чему оно отнесется? хорошо если не к потоку но я бы не рисковал.

(а уж сколько глюков за многоточиями скрывается... не передать ;о))


 
denis24   (2004-12-13 12:40) [9]

да парные они стоят,ты думаеш я такой идиот?
Конекта автоматического тут вообще нет.В последнем примере создал только adoquery и пишу в него запрос.

По поводу Working_ReportFinished
procedure Tfrmworking_report.Working_ReportFinished(sender:tobject);
begin
modalresult:=mrOk;
end;
Закрывается модальная форма при окончании потока.

Переписал создание потока и модальной формы.

frmWorking_report:=TfrmWorking_report.Create(self);
MyThread2:=TWorking_report_word.Create(true);
try
       MyThread2.FreeOnTerminate:=true;
      MyThread2.OnTerminate:=frmWorking_report.Working_ReportFinished ;
       MyThread2.resume;
       frmWorking_report.ShowModal;
finally
       MyThread2.free;
       frmWorking_report.Free;

end;

Результат тотже.Виснет при попытке присвоить значение adoquery.sql.text:=".....


 
sniknik ©   (2004-12-13 18:48) [10]

> да парные они стоят,ты думаеш я такой идиот?
а кто ж тебя знает? ты же не показываеш и не говориш что это зделал, а по обрывкам ... , на третье замечание только среагировал и сказал что сделал а до этого упорно один показывал  и догадывайся что в непоказаном нормально.

> Конекта автоматического тут вообще нет.
см. [6]
если конект не задавать самому (создавать) а прописать в компоненте строку конекта то он создается автоматически, а ему... см. выше.

> Переписал создание потока и модальной формы.
формы, это форма была? VCL-ная? и потом потоковому событию присваиваеш? не "зреадсейфе" компонент?
еще один глюк (который в принципе не там но должен проявиться)

совет. выкини все. создай простой простой (пустой) поток, и после когда заработает, добавляй по одному два оператора...



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

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

Наверх




Память: 0.47 MB
Время: 0.04 c
6-1098729042
Ермак
2004-10-25 22:30
2005.01.16
Именованные каналы в сети


14-1104244484
stud
2004-12-28 17:34
2005.01.16
1с и как с ней бороться))


9-1096377828
Cash
2004-09-28 17:23
2005.01.16
Просмотр удаленного объекта


9-1096925934
Jack
2004-10-05 01:38
2005.01.16
опять по GLScene ?


14-1104209846
Чеширский_Кот
2004-12-28 07:57
2005.01.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский