Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизЗапрос к базе в потоке Найти похожие ветки
← →
Term © (2005-05-17 13:37) [0]Делаю запрос к базе в потоке, но все равно ВСЁ приложение подвисает пока не выполнится запрос... Как победить???
← →
Term © (2005-05-17 13:44) [1]т.е. создаю Thread, и хотел на TStatusBar чтобы шло время выполнения запроса, однако всё притормаживается а время выполнения запроса
← →
Term © (2005-05-17 13:54) [2]НАРОД!!!!
← →
Term © (2005-05-17 14:09) [3]кто нибудь может дать совет???
← →
Polevi © (2005-05-17 14:11) [4]код
← →
Term © (2005-05-17 14:18) [5]
type
TGiper = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
procedure ConectDB;
end;
procedure TGiper.Execute;
begin
Synchronize(ConectDB);
end;
procedure TGiper.ConectDB;
begin
DataModule1.OTCH.Close;
DataModule1.OTCH.SQL.Clear;
DataModule1.OTCH.SQL.Add("DECLARE @Dat1 datetime, @dat2 datetime");
DataModule1.OTCH.SQL.Add("SET @Dat1=:DATA1");
DataModule1.OTCH.SQL.Add("SET @Dat2=:DATA2");
DataModule1.OTCH.SQL.Add("SELECT sa.Naimen, (res1.Prihod_Tovar-res.Tovar_Rashod)as Ostatok_Tovar, (res1.Prihod_Summa-res.Summa_Prodaj_NDS)as Ostatok_Money,");
DataModule1.OTCH.SQL.Add(" res.Summa_Nacen_NDS, res.Summa_Prodaj_NDS");
DataModule1.OTCH.SQL.Add("FROM");
DataModule1.OTCH.SQL.Add("(SELECT rm.Apteka_Id, SUM(rd.Kol_Vo)as Tovar_Rashod, SUM((rd.Price3*rd.Kol_Vo)-rd.Summa_Sk_Val)as Summa_Prodaj_NDS,");
DataModule1.OTCH.SQL.Add(" SUM((rd.Nacen_NDS*rd.Kol_Vo)-rd.Summa_Sk_Val)as Summa_Nacen_NDS");
DataModule1.OTCH.SQL.Add("FROM Rashod_Master rm INNER");
DataModule1.OTCH.SQL.Add(" JOIN Rashod_Detal rd ON rm.Rashod_Id=rd.Rashod_Id");
DataModule1.OTCH.SQL.Add("WHERE (rm.Data BETWEEN @Dat1 and @Dat2)");
DataModule1.OTCH.SQL.Add("GROUP BY rm.Apteka_Id)res INNER JOIN");
DataModule1.OTCH.SQL.Add("(SELECT Apteka_Id, SUM(pd.Kol_Vo)as Prihod_Tovar, SUM(pd.Price3*pd.Kol_Vo)as Prihod_Summa");
DataModule1.OTCH.SQL.Add("FROM Prihod_Master pm INNER JOIN");
DataModule1.OTCH.SQL.Add(" Prihod_Detal pd ON pm.Prih_Id=pd.Prih_Id");
DataModule1.OTCH.SQL.Add("WHERE (pm.Data <=@Dat2)");
DataModule1.OTCH.SQL.Add("GROUP BY pm.Apteka_Id)res1 ON res.Apteka_Id=res1.Apteka_Id INNER JOIN");
DataModule1.OTCH.SQL.Add("Spr_Aptek sa ON res.Apteka_Id=sa.Apteka_Id");
DataModule1.OTCH.SQL.Add("ORDER BY res.Summa_Prodaj_NDS DESC");
DataModule1.OTCH.Parameters.ParamByName("DATA1").Value:=Giper_Apteka.DateEdit1.Date;
DataModule1.OTCH.Parameters.ParamByName("DATA2").Value:=Giper_Apteka.DateEdit2.Date;
DataModule1.OTCH.Open;
Giper_Apteka.Label3.Caption:="Общее количество записей - "+IntToStr(DataModule1.OTCH.RecordCount);
Giper_Apteka.DBGridEh1.Columns.Clear;
Giper_Apteka.DBGridEh1.Columns.Add;
Giper_Apteka.DBGridEh1.Columns.Add;
Giper_Apteka.DBGridEh1.Columns.Add;
Giper_Apteka.DBGridEh1.Columns.Add;
Giper_Apteka.DBGridEh1.Columns.Add;
Giper_Apteka.DBGridEh1.Columns[0].FieldName:="Naimen";
Giper_Apteka.DBGridEh1.Columns[1].FieldName:="Ostatok_Tovar";
Giper_Apteka.DBGridEh1.Columns[2].FieldName:="Ostatok_Money";
Giper_Apteka.DBGridEh1.Columns[3].FieldName:="Summa_Nacen_NDS";
Giper_Apteka.DBGridEh1.Columns[4].FieldName:="Summa_Prodaj_NDS";
Giper_Apteka.DBGridEh1.Columns[0].Title.Caption:="Аптека";
Giper_Apteka.DBGridEh1.Columns[1].Title.Caption:="Остаток товара";
Giper_Apteka.DBGridEh1.Columns[2].Title.Caption:="Остаток в деньгах";
Giper_Apteka.DBGridEh1.Columns[3].Title.Caption:="Сумма наценки с НДС";
Giper_Apteka.DBGridEh1.Columns[4].Title.Caption:="СУММА ПРОДАЖ НДС";
Giper_Apteka.DBGridEh1.Columns[0].Width:=250;
Giper_Apteka.DBGridEh1.Columns[1].Width:=120;
Giper_Apteka.DBGridEh1.Columns[2].Width:=120;
Giper_Apteka.DBGridEh1.Columns[3].Width:=120;
Giper_Apteka.DBGridEh1.Columns[4].Width:=120;
zap:=true;
end;
procedure TGiper_Apteka.Button1Click(Sender: TObject);
begin
if (Giper_Apteka.DateEdit1.Date<>0)and(Giper_Apteka.DateEdit2.Date<>0)then
begin
CurTime:=Time();
zap:=false; zap1:=false;
Giper_Apteka.Timer1.Enabled:=true;
Giper:=TGiper.Create(false);
Giper1:=TGiper1.Create(false);
end;
end;
zap и zap1 - глобальные переменные
← →
Term © (2005-05-17 14:19) [6]Giper1:=TGiper1.Create(false);
поток который запускается одновреммено описание его примерно такоеже
← →
sniknik © (2005-05-17 14:21) [7]procedure TGiper.Execute;
begin
Synchronize(ConectDB);
end;
;о)) Архангельский!? рулез! выкини и купи другую книгу.
← →
Term © (2005-05-17 14:25) [8]:))) ок как правильно :)))
← →
sniknik © (2005-05-17 14:30) [9]правильно использовать ее только там где она нужна, для синхронизации обрашения к обшим данным. все что делается в ней делается в основном(!!!!!) потоке.
← →
Term © (2005-05-17 14:30) [10]но ведь Synchronize можно применить только к методам класса потока... как по другому то
← →
Term © (2005-05-17 14:36) [11]всё убрал Synchronize и всё заработало спасибо
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c