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

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

Когда создать модуль данных


Страницы:   1 2

PoetOfDelphi ©   (2006-02-16 13:30:00) 

Уважаемые, делфисты с опытом!
Пишу приложение для работы с БД. Хочется мне, чтобы в моём проэкте всё было рационально и разложено по полочкам.
Делфи осваивал в сжатые сроки, поэтому в голове моей сумбур. Где-то когда-то вроде бы читал, что модуль данных нужно создавать в последнюю очередь (Apllication.CreateForm(TDataModule)). Я так и сделал. Но это вызвало определённую путаницу в виде перекрёстных ссылок между модулями. Теперь мне начальница грит (сама она такой же программер как и я, только стажа побольше :) ), что в нескольких проэктах нашей фирмы модуль данных создаётся как раз самым первым, а потом из него данные загружаются в остальные формы. При этом у меня тоже возникает путаница, но уже другая. Вправьте мне мозги, пожалуйста или может линкочку  на какую-нть статейку, а? Копаться в томудах нет времени...


PoetOfDelphi   (2006-02-17 16:42:00) [21]


> Грубо говоря, DM не должен uses'ать др.юниты проекта.


:)
Такс. Понятно.
Я, например, в событии OnStateChange,описанном в DM,изменяю сосотояние Control-ов главной формы,в соответствии с новым состоянием датасета.( Как же подругому отразить на форме изменения, произошедшие в таблицах?)
Это есть uses'нье юнита главной формы?


Mikhail   (2006-02-17 16:16:00) [22]


> Johnmen ©

Ну зря Вы так.


Johnmen   (2006-02-17 16:06:00) [23]

>Mikhail   (17.02.06 14:50) [11]

?


Mikhail   (2006-02-17 15:22:00) [24]


> Johnmen ©   (17.02.06 15:06) [12]

?


Johnmen   (2006-02-17 15:06:00) [25]

MainLabel :
try
 LastMessages.Free;
 ViewTexts.Terminate;
except
 goto MainLabel;
end;


Mikhail   (2006-02-17 14:50:00) [26]


program HotLine;

uses
 SysUtils,
 Forms,
 MainFrm in 'MainFrm.pas' {MainForm},
 DataUnt in 'DataUnt.pas' {Data: TDataModule},
 SplashFrm in 'SplashFrm.pas' {SplashForm},
 LoginFrm in 'LoginFrm.pas' {LoginForm},
 ItemEditFrm in 'ItemEditFrm.pas' {ItemEditForm},
 ItemSelectFrm in 'ItemSelectFrm.pas' {ItemSelectForm};

{$R *.res}

var
 SplashForm: TSplashForm;

begin
 Application.Initialize;
 Application.CreateForm(TData, Data);
 if Data.Login then
 try
   SplashForm := TSplashForm.Create(Application);
   try
     SplashForm.Show;
     SplashForm.Repaint;
     Data.OpenDatasets(SplashForm.StatusMessage);
     Application.CreateForm(TMainForm, MainForm);
     ...
     MainForm.UpdateControls;
   finally
     SplashForm.Free;
   end;
   Application.Run;
 except
   Application.Terminate;
 end
 else
 begin
   Data.Free;
   Application.Terminate;
 end
end.


Ega23   (2006-02-17 14:49:00) [27]


program Personnel;

uses
 Forms,
 Sysutils,
 WinProcs,
 windows,
 StrUtils,
 UDMpas in 'UDMpas.pas' {DMpas: TDataModule},
 UMain in 'UMain.pas' {FMain},
 KedrClntDll in 'KedrClntDll.pas',
 .........

var hnd:THandle;
ss:string;

begin

 ss:=ExtractFileName(paramstr(0) );
 hnd:=CreateMutex(nil, false, PChar(ss) );
 if GetLastError = ERROR_ALREADY_EXISTS then
 begin
  Beep(100,200); //MessageBeep ->in WinProcs
  ReleaseMutex(hnd);
  Exit;
 end;

 Application.Initialize;

 if not FindCmdLineSwitch('s',[],True) then UseSplash:=True;

 if UseSplash then ShowSplashFormDLL(Application,' Подсистема "Бюро пропусков"');

 Application.HelpFile:='Personnel.chm';

 Application.CreateForm(TDMpas, DMpas);
 if not DMpas.LoginOK then
  begin
     DMpas.Free;
     DMpas:=nil;
     ReleaseMutex(hnd);
     Exit;
  end;
Application.ProcessMessages;

 Application.CreateForm(TFMain, FMain);
 Application.CreateForm(TFExtSearch, FExtSearch);
//  Application.CreateForm(TFPersReport, FPersReport);
 if UseSplash then FreeSplashFormDLL;
 Application.Run;
end.


Johnmen   (2006-02-17 13:49:00) [28]


> msguns ©   (17.02.06 12:06) [7]
> Даже юнит главной формы и юниты с коллекциями процедур и
> функций ?


wal уже ответил
:)


wal   (2006-02-17 12:18:00) [29]


> Даже юнит главной формы и юниты с коллекциями процедур и
> функций ?
А зачем DM-у вообще знать о главной форме? Его задача - предоставлять данные, а кому их представлять - не его дело, кому надо, тот и возьмет. А вот коллекции процедур и функций - это пожалуйста, если, опять же эти процедуры и функции не имеют различий от того, кто их вызывает.

С уважением.


msguns   (2006-02-17 12:06:00) [30]

>Johnmen ©   (16.02.06 13:45) [4]
>Грубо говоря, DM не должен uses'ать др.юниты проекта.

Даже юнит главной формы и юниты с коллекциями процедур и функций ?


Johnmen   (2006-02-16 14:16:00) [31]

>А что это даёт?

Это даёт п.2 из [1], что даёт в свою очередь отсутствие
"определённую путаницу в виде перекрёстных ссылок между модулями." и "путаница, но уже другая"
:)


PoetOfDelphi   (2006-02-16 14:11:00) [32]


> DM не должен uses'ать др.юниты проекта

А что это даёт?


Johnmen   (2006-02-16 13:45:00) [33]

Грубо говоря, DM не должен uses'ать др.юниты проекта.


PoetOfDelphi   (2006-02-16 13:41:00) [34]


> 2. DM ничего не должен знать про способы представления его
> информации

Что это значит? Можно немножко подробнее?


Digitman   (2006-02-16 13:38:00) [35]


> PoetOfDelphi ©   (16.02.06 13:30)  


Важно понимать следующее:

- объект либо существует (был создан) либо не существует в тот или иной момент времени ... DataModule-объект - не исключение.

- обращения к методам/св-вам объекта должно осущ-ся в соответствии с его threading-safe-моделью.


Johnmen   (2006-02-16 13:34:00) [36]

1. DM первым
2. DM ничего не должен знать про способы представления его информации


Страницы:   1 2

Наверх

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