Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Вниз

DataModule премущества и недостатки, если они есть конечно??? 


lel   (2002-02-27 16:37) [0]

Что многоуважаемый All может сказать про это.
Кто использует, кто нет???
Желаю удачи в темных делах.
С уважением Алексей.



TSV   (2002-02-27 20:16) [1]

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



KIR   (2002-02-27 23:01) [2]

Я тоже использую, а порой даже два - один для таблиц, другой - для запросов и отчетов (я FastReport туда же пихаю). Очень удобно! А если разросать все невизуальные DB-компоненты по формам приложения, то рискуешь в определенный момент некоторые из них потерять и создать новые - получится дубль, а это нехорошо!



EAlexander   (2002-02-28 10:04) [3]

А я не всегда использую, поскольку иногда лучше ручками создать query, вытащить все и Query.Free :)



Виктор Щербаков   (2002-02-28 10:55) [4]

Лично мне DM очень помогает в DesignTime. Удобно работать с DB компонентами, когда связи Dadasource->DataSet, поля и параметры запросов и т.д. представлены в виде дерева. Всё это резко сокращает время дизайна, да и на формах освобождается место.



petr_v_a   (2002-02-28 12:40) [5]

>lel повторюсь :)
Ежели невизуальные компоненты используются более чем одной формой, удобно использовать DM. В противном случае это пустая трата памяти.



Кулюкин Олег   (2002-02-28 12:48) [6]

2 Lel
Если приложение MDI или используются фреймы, то DataModule не спасет отца русской демократии.

В остальных случаях DataModule создает удобства.
Скорее это вопрос вкуса.



Polevi   (2002-02-28 13:09) [7]

2Кулюкин Олег
У меня MDI приложение и я использую DM - создается динамически в OnCreate формы



TSV   (2002-02-28 13:31) [8]

А какие вообще проблемы при использовании DM в MDI? Спрашиваю потому, что у меня оных не наблюдается. :-)



Polevi   (2002-02-28 14:06) [9]

Проблема в том что можно открыть 2 экз одного окна - если DM один - данные в обеих окнах будут идентичны..
Решается динамическим созданием DM - для каждого окна свой..



Кулюкин Олег   (2002-02-28 14:16) [10]

2 Polevi
Хорошо ли плодить DM на каждую форму?
Какой тогда в них смысл?
Или Вы не хотите замусоривать форму DataSet"ами?
А в проекте есть основной DM, на котором лежит компонент который конектится к БД? Или каждый DM создает свой коннект?

Слышал (сам не пробовал) что при наличии нескольких DM вылезают странные глюки. Не было такого?

2 TSV
Polevi уже ответил.



Polevi   (2002-02-28 14:26) [11]

2Кулюкин Олег
Дело в том что при открытиии окна юзер выбирает базу, с которой он хочет работать (их несколько - структура одна, данные разные)
Поэтому коннект свой для каждого экземпляра DM
Но это мой частный случай, конечно..

А создавать для каждого экземпляра формы свой экземпляр DM не очень накладно, форма в созданном DM открывает лишь те таблицы, которые ей нужны..



TSV   (2002-02-28 21:20) [12]

> Polevi © (28.02.02 14:06)

Проблему открытия двух экземпляров одного окна можно легко решить, если это, конечно, необходимо.



Фэ   (2002-03-01 02:02) [13]

На DM держу только TDataBase и пару-тройку вспомогательных TDataSet.
Формы, наследуясь, обрастают несколькими TDataset(TQuery).
Затем эти формы используются, как базовые для создания прикладных форм(из репозитория).
Кроме того, при необходимости создаются DS в Run-Time для выполнения базовых операций.
Пример:
Форма с одним гридом
___Форма с master-slave гридами (один грид наследован)
___Форма с TreeView и одним гридом (грид наследован)
_______Форма с TreeView и двумя гридами (добавлен грид)

На пример можно здесь взглянуть
http://www.pi8plus.ru/images/under/town.png



Polevi   (2002-03-01 10:07) [14]

2TSV ©
Под решеним проблемы ты понимаешь запрет открытия 2 одинаковых окон ?
:-)



TSV   (2002-03-01 10:25) [15]

Ну да. Просто пункт меню делается недоступным. :-)



Polevi   (2002-03-01 10:37) [16]

зачем тогда MDI ?



diveevsb   (2002-03-01 11:59) [17]

Всем привет. Я разработчик программного продукта который непосредственно связан с данным вопросом. И по поводу DataModule могу сказать следующее (+/-):
Данный компонент очень полезен в том случае когда у вас заполняются данные из словарей колличество которых около неск. сотен. их необходимо где-то размещать и если мы их будем размещать на форме то кроме этих компонент мы больше ничего не увидем, да и к тому же полезно визуально ориентироваться по названиям, а если к ним добавим DateSource?-В этом плюс.
Но и на одном DataModule всё разместить не очень то получается- не удобно. Вот если бы создать какие нибудь Box-ы и размещать там компоненты по тематике, к тому же DataModule не очень то поворотлив.
Создавать динамически DataModule при создании форм (к примеру MDI форм)полезно я думаю в том случае, когда необходимо одновременно создавать, видеть, редактировать данные из каких то рабочих таблиц. Используя одни и те же источники данных (к примеру с одного и того же DM) мы во всех MDI формах будем видеть одну и туже информацию, а как быть если нам необходимо отредактировать одновременно информацию о нескольких "клиентах" ?
Данный подход применим, но ВОТ ВОПРОС: когда я впервые применил такой подход,и создавал ДИНАМИЧЕСКИ НЕСКОЛЬКО РАЗНЫХ DM оказалось что во всех открытых формах одно и те же данные.






TSV   (2002-03-01 12:13) [18]

> Polevi © (01.03.02 10:37)

MDI нужен для того, чтобы обеспечить пользователю возможность работы с несколькими окнами внутри приложения. Кто сказал, что это обязательно должны быть одинаковые окна (по структуре), как в графическом редакторе, например. Это могут быть различные справочники, документы и т.д.



TSV   (2002-03-01 12:15) [19]

Просто их количество ограничено. Но от этого MDI-приложение хуже не становится. :-)



Фэ   (2002-03-01 13:33) [20]

Можно делать так

procedure TfmMain.MenuClick(Sender: TObject);
var
cname: string;
begin
cname := (Sender as TComponent).Name;

// имеется в виду что Child-форму можно вызвать или по пункту
// меню popUsers или по кнопке btnUsers
if (cname = "popUsers") or (cname = "btnUsers") then begin
fmUsers := TfmUsers.Create(Self);
fmUsers.Visible := True;
fmUsers.SetFocus;
popUsers.Enabled := False; // запрещается пункт меню
btnUsers.Enabled := False; // запрещается кнопка
end;
//...
end;



TSV   (2002-03-01 13:49) [21]

Я делаю так:

procedure TMainForm.StreetsItemClick(Sender: TObject);
begin
StreetsForm := TStreetsForm.Create(Application);
StreetsItem.Enabled := False;
end;

А затем:

procedure TMainForm.SpravochnikiItemClick(Sender: TObject);
var
i: integer;
IsStreets, ...: Boolean;
begin
// инициализация
IsStreets := False;
...
// перебор всех открытых дочерних форм,
// которые могли быть открыты из меню "Справочники"
for i := 0 to MDIChildCount - 1 do
begin
if MDIChildren[i].Name = "StreetsForm" then
IsStreets := True;
...
end; // for
StreetsItem.Enabled := not IsStreets;
...
end;

P.S.
Пункт меню StreetsItem является подпунктом SpravochnikiItem.



diveevsb   (2002-03-01 14:31) [22]

Ребята если это обсуждение как вызвать MDI форму то я делаю:
procedure TMain.N4Click(Sender: TObject);
var i:integer;
b:boolean;
Curr_Rate:TCurr_Rate;
begin
b:=false;
For i := 0 To Screen.FormCount-1 Do
begin
If Screen.Forms[i].ClassName = "TCurr_Rate" then
Begin
b:=true;
Screen.Forms[i].BringToFront;
Screen.Forms[i].Position:=poMainFormCenter;
End;
end;
If b=false Then
begin
Curr_Rate:=TCurr_Rate.Create(self);
end;

end;

- для одного и только одного окна данного типа

или если надо много то без проверки



Polevi   (2002-03-01 14:51) [23]

2diveevsb ©
Надо для Datasource вручную назначать Dataset из созданного DM

procedure TMdiChildFrm.Create(..)
begin
DM:=TDM.Create(nil)
FirstDatasource.Dataset:=DM.FirstTable;
SecondDatasource.Dataset:=DM.SecondTable;

PS
Datasource для DB-Aware компонентов я на DM не храню, они лежат на форме



diveevsb   (2002-03-02 12:56) [24]

Polevy спосибо за resend на мой вопрос. Я так и делал но хотел бы узнать может кто-то делает по другому.



Ба,   (2002-03-03 03:01) [25]

Lel забыл о суициде и вспомнил о программировании! Это ПЛЮС!



Davojan   (2002-03-03 12:13) [26]

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




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.77 MB
Время: 0.03 c
1-90918           AlexRaza              2002-03-18 20:39  2002.03.28  
Имя файла при запуске


1-90900           skovorodka            2002-03-17 11:03  2002.03.28  
Как зная путь к .exe файлу узнать его картинку ?


14-91064          Sergo                 2002-02-15 08:25  2002.03.28  
Насчет здоровья


3-90803           arnold lane           2002-03-04 20:59  2002.03.28  
вопрос


1-90972           ivit61                2002-03-13 10:52  2002.03.28  
Поиск метода по адресу