Текущий архив: 2002.03.28;
Скачать: CL | DM;
Вниз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;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.006 c