![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про TDataModule [D6, IB6.x]
eugene32 © (2004-09-25 19:08:00)Объясните пожалуйста, для чего нужен модуль данных(Data Module) и как им пользоваться. Пытался найти - не нашел.
Какое преимущество от того, что я перемещю все Query и Datasourse'ы программы на отдельный датамодуль?
Заранее благодарен.
eugene32 (2004-09-27 14:43:00) [1]msguns, thanks for help ;)
msguns (2004-09-27 10:04:00) [2]при этом все формы- предки
Пардон, потомки, конюшно ;)))
msguns (2004-09-27 10:03:00) [3]Еще о пользе TDataModule
Если в проекте используется базовая форма, с которой наследуются рабочие формы (самый простой пример - со справочниками), при этом все формы-предки, ессно, не автосоздаваемые, то централизация описания некоторых методов и свойств объектов БД (и не только) ооочень удобно выносить в некий объект (ы), во-первых, автосоздаваемый и всегда существующий при выполнении приложения, во-вторых, "видимый" всеми остальными.
Кроме того, удобно централизовать основную часть логики в отдельно вынесенном блоке кода. (Я, в частности, реализую в датамодулях все пересортировки, модификации ВСЕХ таблиц, разнообразные AfterScroll и т.д., т.е. то, что по каким-то причинам не "влезло" в бизнес-логику на сервере)
eugene32 (2004-09-26 10:24:00) [4]kaif, Благодарю.
kaif (2004-09-26 04:24:00) [5]Самое полезное в DataModule - размещать на них компоненты ImageList с картинками. А запросы я лично предпочитаю раскладывать по формам. В модуле данных у меня обычно только компонент базы данных лежит и одной глобальной readonly транзакции для разных часто требующихся читающих запросов.
Чтобы модуль данных был виден (доступен) в форме, нужно его просто в usesмодуля формы указать.
eugene32 (2004-09-25 20:59:00) [6]Vlad, спасибо за помощь. Немного прояснил обстановку ;)
Vlad (2004-09-25 20:58:00) [7]
> eugene32 (25.09.04 20:53) [8]
> И передать в библиотечную функцию ДатаМодуль?
Ну да. В DLL делаешь экспортируемую функцию, что-нибудь вроде
function CalculatePayment(DM: TDataModule): Double;
begin
// Тут обращаемся к объектам переданного датамодуля как обычно
DM.Query1.FieldByName(....).AsFloat
и т.д.
end;
eugene32 (2004-09-25 20:53:00) [8]И передать в библиотечную функцию ДатаМодуль?
Vlad (2004-09-25 20:47:00) [9]
> eugene32 (25.09.04 20:18) [6]
> Это я усвоил. Как им пользоваться? в чём преимущества?
Пользоваться так же как любым объектом, так же как формой (отличие в том, что визуализировать нельзя).
Преимущества неочевидны. Скажем если у тебя в проекте несколько форм работают с одними и теми же DB-компонентами (TQuery, TDataBase и т.п.), то чтобы не разбрасывать их по разным формам, можно их вынести в отдельный DataModule, для простоты и ясности.
А иногда наоборот, удобнее бывает компоненты держать не все скопом, а на каждой форме - свои.
Так же DataModule бывает удобен для передачи в DLL.
Скажем, тебе нужно передать TDataBase и штук 5 разных TQuery в некую библиотечную функцию в кач-ве параметров. Так вот, можно сделать 5 параметров соотв. типов, а можно один - TDataModule. ИМХО, гораздо удобнее.
eugene32 (2004-09-25 20:18:00) [10]Это я усвоил. Как им пользоваться? в чём преимущества?
Anatoly Podgoretsky (2004-09-25 20:10:00) [11]Это особый вид формы, контейнер для невизуальных компонент.
eugene32 (2004-09-25 19:24:00) [12]Можно даже примерчик из программы...
eugene32 (2004-09-25 19:23:00) [13]Да, и что должно писаться в этом новом юните? Обработка каких событий? Ну не зря же его (Датамодуль) придумали.
eugene32 (2004-09-25 19:21:00) [14]Подробнее про удобство можно?
Sergey_Masloff (2004-09-25 19:10:00) [15]Да особо не для чего. Для удобства. Ну и компонентами с датамодуля обычно пользуется много форм одновременно. А так все равно.