Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
3-1179731199
White Barsik
2007-05-21 11:06
2007.09.23
Каскад из TADOQuery


15-1187788580
TUser
2007-08-22 17:16
2007.09.23
Китайцев хачу


2-1188366012
@!!ex
2007-08-29 09:40
2007.09.23
Как установить иконку на приложение?


15-1186752698
_Mike_
2007-08-10 17:31
2007.09.23
Про компилятор


2-1188462080
Kolan
2007-08-30 12:21
2007.09.23
Динамическая вставка пунктов меню в «нужные» места, как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский