Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2015, 11:30   #1
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию Как в данном примере сделать 2 процесса параллельными?

Есть база данных на sql server 2008 с номерами телефонов и программа на delphi 2010, осуществляющая поиск по этой базе данных нужного номера. Сам поиск реализован в хранимой процедуре Proc_Poisk_po_nomeru на sql server :

Код:
procedure TFormMain.PoiskNomeraClick(Sender: TObject);
var  i: integer;
begin //если в поле поиска номера телефона ничего не введено, то выдаем сообщение об ошибке
   if Length(VvodNomeraDlyaPoiska.Text) < 1 then MessageBox(0,'Номер телефона не задан!','Предупреждение',MB_OK);
   begin 
//делаем поиск по базе данных                             
      ADOStoredProc_Poisk_po_nomeru.Parameters.ParamValues['@nom'] := VvodNomeraDlyaPoiska.Text;
      ADOStoredProc_Poisk_po_nomeru.ExecProc;
//Отображение результата поиска в Grid
      ADOQueryPoisk.Sql.Clear;
      ADOQueryPoisk.Sql.Add('Select Номер,"Дата и время",Длительность, Комментарий from ##Rezultat_poiska_po_nomeru');
      ADOQueryPoisk.Open;
      ShowMessage('Найдено записей по указанному номеру телефона - ' + IntToStr(ADOQueryPoisk.RecordCount));
      end;
   end;
end;
Так как телефонов в БД много и поиск реализован на неполное соответствие, то весь процесс занимает много времени. Поэтому хотелось, чтобы пользователь видел, что поиск идет. Для этого реализована другая форма с анимацией (форма с компонентой Animate1):

procedure TFormAnimate.FormCreate(Sender: TObject);
begin
Animate1.Active := true;
end;

Как сделать так, чтобы при вызове хранимой процедуры поиск одновременно запускалась форма с анимацией до окончания процесса поиска? Если просто делать вызов этой формы, то все идет последовательно, то есть пока не закрыть форму с анимацией, хранимая процедура вызываться не будет. Как эти процессы сделать параллельными?

Последний раз редактировалось Stilet; 07.10.2015 в 12:06.
Maxjuvefan вне форума Ответить с цитированием
Старый 07.10.2015, 12:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тебе нужно научиться работать с TThread.
Почитай о этом классе, запихни в его процедуру Execute свой код и получишь параллельность.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2015, 13:18   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
Если просто делать вызов этой формы, то все идет последовательно,
В представленном коде нет НИКАКОГО вызова "этой" формы.
А с давних времен в Delphi есть ДВА варианта "вызова формы".
И какой из них были использован у тебя?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 08.10.2015, 08:42   #4
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию

Код:
if Length(VvodNomeraDlyaPoiska.Text) < 1 then MessageBox(0,'Номер телефона не задан!','Предупреждение',MB_OK)
   else
   begin //делаем поиск по базе данных
      FormAnimate.Show;
      ADOStoredProc_Poisk_po_nomeru.Parameters.ParamValues['@nom'] := VvodNomeraDlyaPoiska.Text;
      ADOStoredProc_Poisk_po_nomeru.ExecProc;
//Отображение результата поиска в Grid
      ADOQueryPoisk.Sql.Clear;
      ADOQueryPoisk.Sql.Add('Select Номер,"Дата и время",Длительность, Комментарий from ##Rezultat_poiska_po_nomeru');
      ADOQueryPoisk.Open;
      FormAnimate.Close;
      ShowMessage('Найдено записей по указанному номеру телефона - ' + IntToStr(ADOQueryPoisk.RecordCount));

Последний раз редактировалось Stilet; 08.10.2015 в 09:00.
Maxjuvefan вне форума Ответить с цитированием
Старый 08.10.2015, 09:00   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Maxjuvefan
С TThread так и не познакомился?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.10.2015, 10:28   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Я не знаю как внутри устроен Animate (будет ли работать сама анимация во время ожидания данных), но показу самой формы ДО начала получения данных
может помочь
Код:
formAnimate.show;
formanimate.Animate1.Active:=true;
Application.ProcessMessages; //вот этот "костыль" 
...
formAnimate.Animate1.Active:=false;
formAnumate.Hide;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать выбор процесса ts-alan ASP.NET 0 31.12.2014 13:05
Как сделать бизнес на примере - как разжечь костер. Alar Свободное общение 21 25.04.2014 18:17
в данном примере проблема в Function или Sub? 4anae6 Microsoft Office Excel 4 19.04.2013 20:46
Как перейти от Junit3 к Junit4 в данном примере? neearen Помощь студентам 0 02.12.2010 00:48
Delphi, рекурсия, как сделать все возможные N-ки чисел (сколько столбцов такая N-ка,в данном случае 3)? domik Помощь студентам 5 26.09.2007 16:43