Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос к базе в потоке [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 чтобы шло время выполнения запроса, однако всё притормаживается а время выполнения запроса


Наверх

Титульная страница Поиск, карта сайта Написать письмо