![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос к базе в потоке [MSSQL2000]
Term © (2005-05-17 13:37:00)Делаю запрос к базе в потоке, но все равно ВСЁ приложение подвисает пока не выполнится запрос... Как победить???
Term (2005-05-17 14:36:00) [1]всё убрал Synchronize и всё заработало спасибо
sniknik (2005-05-17 14:30:00) [2]правильно использовать ее только там где она нужна, для синхронизации обрашения к обшим данным. все что делается в ней делается в основном(!!!!!) потоке.
Term (2005-05-17 14:30:00) [3]но ведь Synchronize можно применить только к методам класса потока... как по другому то
Term (2005-05-17 14:25:00) [4]:))) ок как правильно :)))
sniknik (2005-05-17 14:21:00) [5]procedure TGiper.Execute;
begin
Synchronize(ConectDB);
end;
;о)) Архангельский!? рулез! выкини и купи другую книгу.
Term (2005-05-17 14:19:00) [6]Giper1:=TGiper1.Create(false);
поток который запускается одновреммено описание его примерно такоеже
Term (2005-05-17 14:18:00) [7]
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 - глобальные переменные
Polevi (2005-05-17 14:11:00) [8]код
Term (2005-05-17 14:09:00) [9]кто нибудь может дать совет???
Term (2005-05-17 13:54:00) [10]НАРОД!!!!
Term (2005-05-17 13:44:00) [11]т.е. создаю Thread, и хотел на TStatusBar чтобы шло время выполнения запроса, однако всё притормаживается а время выполнения запроса