Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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 - глобализация объектов базы данных. Дело в том, что программа обычно состоит из нескольких модулей и обычно не только одному из них нужен доступ к базе.
Другое удобство - косметическое, просто удобно, когда все объекты базы находятся вместе, но это - второстепенно.



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

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

Наверх





Память: 0.51 MB
Время: 0.007 c
1-90890
AlexNic
2002-03-17 12:19
2002.03.28
ShortCut в ActionList


1-90952
kingom
2002-03-13 14:16
2002.03.28
Почему в консольном приложении нельзя использовать COM?


3-90779
alexbl
2002-03-04 03:07
2002.03.28
ListBox


4-91102
Mirovodin
2002-01-28 12:38
2002.03.28
Таблица импорта


3-90764
chik_
2002-03-01 10:29
2002.03.28
SQL+BDE+DELPHI





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский