Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.23;
Скачать: CL | DM;

Вниз

DataSet и потоки.   Найти похожие ветки 

 
Help_   (2007-08-23 15:14) [0]

Здравствуйте!
Необходимо форму чтобы форма справочника, которая имеет на себе компоненты набора данных, работала в другом потоке, нежели основная форма.
Как это реализовать? С потоками только начал знакомится.
Может есть живые примеры и т. д.
Заранее благодарен за помощь.!


 
oldman ©   (2007-08-23 15:20) [1]

А зачем такой изврат?
Люди вызывают справочник при возникновении вопросов, чтобы почитать его и не трогать основной процесс, поскольку именно в нем и возник вопрос.


 
Help_   (2007-08-23 15:26) [2]


> oldman ©   (23.08.07 15:20) [1]

Не ну это я так просто пример привел, ну например другой вариант:
Скажем не справочник а какая нить форма расчетов....
Типа нажали кнопочку и форма пошла работать с DataSet- ом, там считает себе минут пять например, а мы в это время также работаем со справочниками, да и вообще програмой необращая внимания на расчеты...

P.S.
Ток историю про два "Conenta" я уже слыхал... ;-)


 
Игорь Шевченко ©   (2007-08-23 15:29) [3]


> Типа нажали кнопочку и форма пошла работать с DataSet- ом,
>  там считает себе минут пять например, а мы в это время
> также работаем со справочниками, да и вообще програмой необращая
> внимания на расчеты...


И в чем проблема ?

Я делал clientDataSet, в который помещал данные в потоке, одновременно эти данные читал DbGrid, каждая операция добавления данных выполнялась через Synchronize, все довольны


 
Help_   (2007-08-23 15:33) [4]


> Игорь Шевченко ©   (23.08.07 15:29) [3]

Да какбы эт на пальчиках посмотреть...

P.S.
 Сори за наглость.. :-]


 
Romkin ©   (2007-08-23 15:34) [5]

Зачем нужна форма, вот в чем вопрос :)


 
Игорь Шевченко ©   (2007-08-23 15:39) [6]

Можно и на пальчиках:

type
 TBirthdayThread = class(TThread)
 private
   FID: Integer;
   FLastName: string;
   FFirstName: string;
   FSecondName: string;
   FBirthday: TDateTime;
 private
   procedure AddMemberToBirthdayList;
   procedure AfterFillCDS;
 public
   constructor Create;
   procedure Execute; override;
 end;

{ TBirthdayThread }

procedure TBirthdayThread.AddMemberToBirthdayList;
begin
 dmMember.AddMemberToBirthdayList(FID, FLastName, FFirstName, FSecondName,
   FBirthday);
end;

procedure TBirthdayThread.AfterFillCDS;
begin
 with dmMember.cdsBirthday do
 begin
   DisableControls;
   try
     IndexName := "VIEWKEY";
     First;
   finally
     EnableControls;
   end;
 end;
end;

constructor TBirthdayThread.Create;
begin
 inherited Create (true);
 FreeOnTerminate := true;
 Resume;
end;

procedure TBirthdayThread.Execute;
var
 Today: string;
begin
 if not Terminated then
 begin
   dmMember.BirthdayThreadRunning := true;
   Today := FormatDateTime("dd.mm", Now);
   with dmMember.qMemberBirthday do
   begin
     Prepare;
     Params[0].AsString := Today;
     Open;
     try
       while not Eof and not Terminated do
       begin
         FID := FieldByName("MEMBER_ID").AsInteger;
         FLastName := FieldByName("LAST_NAME").AsString;
         FFirstName := FieldByName("FIRST_NAME").AsString;
         FSecondName := FieldByName("SECOND_NAME").AsString;
         FBirthday := FieldByName("BIRTHDAY").AsDateTime;
         Synchronize(AddMemberToBirthdayList);
         Next;
       end;
     finally
       Close;
     end;
     Synchronize(AfterFillCDS);
   end;
   dmMember.BirthdayThreadRunning := false;
 end;
end;


 
Help_   (2007-08-23 15:41) [7]


> Romkin ©   (23.08.07 15:34) [5]

Ну скажем форма нужна для текущего отображения процесса расчетов. Или чтот вроде этого.
Адним словом проблема в том, что на одной из ворм моего проекта реализуются расчеты, примерно по 350 000 записям.
В програме реализованно Application.ProcessMessage; (Изв. если ошибся)
Когда я произвожу расчеты, я могу только перемещать форму, но выполнять какието другие действия, скажел полистать справочник не получается до тех пор пок расчет не завершится.


 
Help_   (2007-08-23 15:44) [8]


> Игорь Шевченко ©   (23.08.07 15:39) [6]

Спасибо! Вот чеслово, что говарили не понял, как пример привели сразу дошло.
P.S.
Люблю жевые примеры.. Ещераз спасибо
> Игорь Шевченко

Но обсуждение не останавливается, хотелось бы послушать (почитать) еще мнения...
;-)


 
Игорь Шевченко ©   (2007-08-23 15:45) [9]

Тогда еще до кучи:

procedure TdmMember.AddMemberToBirthdayList(ID: Integer;
 const LastName, FirstName, SecondName: string; Birthday: TDateTime);
begin
 with cdsBirthday do
 begin
   Insert;
   try
     FieldByName("MEMBER_ID").AsInteger := ID;
     FieldByName("LAST_NAME").AsString := LastName;
     FieldByName("FIRST_NAME").AsString := FirstName;
     FieldByName("SECOND_NAME").AsString := SecondName;
     FieldByName("BIRTHDAY").AsDateTime := BirthDay;
     Post;
   except
     Cancel;
   end;
 end;
end;

procedure TdmMember.DataModuleCreate(Sender: TObject);
begin
 inherited;
 MemberMapper := GetMapper;
 cdsBirthday.CreateDataSet;
 dmMember := Self; //Для запуска потока
 if Options.RunBirthdayThread then
   TBirthdayThread.Create;
end;


 
Leonid Troyanovsky ©   (2007-08-23 15:54) [10]


> Help_   (23.08.07 15:41) [7]

> Когда я произвожу расчеты, я могу только перемещать форму,
>  но выполнять какието другие действия, скажел полистать
> справочник не получается до тех пор пок расчет не завершится.

Потоки необязательны, особенно, если процессор один.
Проще сделать специальную форму для расчетов,
которая будет работать в то время, пока юзер неактивен.
Только расчеты надо производить такими блоками,
время исполнения которых не будет раздражать юзера.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2007-08-23 17:20) [11]

Молчим про базу, молчим про средства доступа, может этого достаточно.



Страницы: 1 вся ветка

Текущий архив: 2007.09.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.124 c
2-1188199309
арпывапр
2007-08-27 11:21
2007.09.23
паыметры зупускаемого приложения.


1-1184328518
ambhtr
2007-07-13 16:08
2007.09.23
Как проверить строку на заданый формат (шаблон)


2-1188548482
Sonia
2007-08-31 12:21
2007.09.23
RadioGroup


15-1186482211
oldman
2007-08-07 14:23
2007.09.23
Я, конечно, рад за Россию, но...


8-1165939363
TkN
2006-12-12 19:02
2007.09.23
Проблема с переполнением памяти