Главная страница
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.016 c
1-61605
MegaVolt
2002-12-09 09:43
2002.12.19
Создание объекта в DLLке


7-61852
3asys
2002-10-16 15:23
2002.12.19
Как программно запретить PrintScreen во время работы программы


3-61420
Rule
2002-11-29 14:20
2002.12.19
ППоооооМоооооГииииииТе-е-е-е-е-е-е-е-е-е-е тону есть табблицы


1-61679
baryjul
2002-12-08 15:15
2002.12.19
Как на панели StatusBar отобразить объект TGaude ?


4-61872
kostik78ua
2002-11-06 16:45
2002.12.19
Internet Explorer