Форум: "Основная";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
ВнизПотоки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c