Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.19;
Скачать: CL | DM;

Вниз

Потоки   Найти похожие ветки 

 
TTCustomDelphiMaster ©   (2002-12-06 15:37) [0]

Можно ли использовать в "дополнительном" потоке компоненты TTable и TQuery?


 
Digitman ©   (2002-12-06 15:51) [1]

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


 
TTCustomDelphiMaster ©   (2002-12-06 16:30) [2]

Мне нудно проверить целостность базы при загрузке приложения. При нужно поазывать splash форму.
Я думаю сделать так
begin
Application.Initialize;
Здесь будет создание splash формы и потока для проверки целостности базы, в которой будет отражатся процесс проверки.
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Такая схема имеет право на существование?


 
Digitman ©   (2002-12-06 16:54) [3]


> Такая схема имеет право на существование?


Вполне.


 
TTCustomDelphiMaster ©   (2002-12-06 17:45) [4]

Ок. Понял.
Сейчас заниманись разработкой концепции приложения. Дополнительные вопросы появятся недели через две.


 
Юрий Зотов ©   (2002-12-06 18:17) [5]

Нормальная, не раз проверенная схема. Наверное, излишне, но все же напомню:
1. Обновление прогрессбара (или что там вместо него) должно выполняться в контексте главного потока.
2. Сплэш-форму надо создавать просто вызовом Create, а не через Application.CreateForm, иначе она станет главной.


 
Сергей Бушин ©   (2002-12-06 18:44) [6]

Еще добавлю, что при использовании БД в потоках необходимо выполнить два требования:
1. Каждый поток запроса должен распалагаться в собственном сеансе. Т.е. для TQuery необходим компонент Session. И ему (TSeesion) необходимо присвоить имя SessionName объекта TQuery.
2. Компонент для доступа к данным, т.е. TQuery и другие, не должен быть связан с TDatasource когда запрос открывается из вторичного потока. Иначе соединение должно быть реализовано в контексте основного потока.


 
TTCustomDelphiMaster ©   (2002-12-06 19:53) [7]

Сергей Бушин
Что то не допонял. База у меня будет в Paradox (или InterBase). В каком месте нужно использовать TSesion?


 
Сергей Бушин ©   (2002-12-06 21:00) [8]

код должен быть примерно такой:

MySession.SessionName:=GenerateUniqueValue;
MyDataBase.SessionName:=Session.SessionName;
MyQuery.DatabaseName:=MyDatabase.DatabaseName;
MyQuery.SessionName:=Session.SessionName;
MyThread:=TMyDBThread.Create(MyQuery, MyDatasource);

В потоке уже открывается запрос. В конструктор потока передается также TDatasource, чтобы связать его в потоке с Query, но это нужно делать через Synchronize, т.е.:

procedure TMyDBThread.Execute;
begin
...
ThreadQuery.Open;
Synchronize(UpdateVCL);
...
end;

procedure TMyDBThread.UpdateVCL;
begin
...
ThreadSource.DataSet:=ThreadQuery;
...
end;





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

Текущий архив: 2002.12.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
14-61791
AL2002
2002-11-28 15:29
2002.12.19
Люди, у меня уже крыша едет...


1-61575
MEG
2002-12-03 18:12
2002.12.19
<b>Memo______________html</b>


8-61717
DeMoN-777
2002-09-03 16:47
2002.12.19
Как узнать длинну трека или клипа проигрываемого в TMediaPlayer ?


3-61406
Леший
2002-12-03 13:53
2002.12.19
Подскажите пожалуйста. Мне нужно строки в DBGrid подсвечивать


14-61801
Anatoly Podgoretsky
2002-11-28 07:49
2002.12.19
Именинники 28 ноября