Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Создание коллекции датасетов


Автор: DarkProg 13.10.2012, 14:35
Всем, доброго дня smile
Вот сижу делаю очень сложную модификацию проекта и раз уж начал, то гулять, так гулять  smile 

Есть в проекте формы где содержится огромное количество датасетов, порядка 20-30, таких форм не много, но аж глаза разбегаются куда кликнуть, да и датасеты необходимо вечно таскать из стороны в сторону, если надо вдруг передвинуть какую-нибудь кнопочку... В общем мучение ещё то.

Есть мысль это педелать, запихав всё это дело в коллекцию, но вот не получается в лоб решение...
По идее можно было бы использовать класс TCollection но тогда датасет должен быть наследником класса TCollectionItem, чем он естественно не является.
Я мог бы создать TCollectionItem у которого было бы свойство TDataSet, только смысла от этого никакого, потому что тогда я просто получу элемент коллекции с возможностью указать ссылку на объект, а мне нужен компонент который сам в себе будет содержать всю эту гору датасетов...

P.S. как решение простое я вижу использование DataModule где и будет валятся вся эта гора датасетов, но хотелось бы всё таки компонентик попробовать сваять...
P.P.S. я правда что-то не могу найти чтобы кто-то такое вообще пробовал...

Автор: TSerg 13.10.2012, 18:25
Цитата(DarkProg @  13.10.2012,  14:35 Найти цитируемый пост)
как решение простое я вижу использование DataModule


Именно для этого он и придуман.

Автор: DarkProg 13.10.2012, 18:43
Цитата(TSerg @  13.10.2012,  19:25 Найти цитируемый пост)
Именно для этого он и придуман. 

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

Я то в общих чертах уже придумал как это можно реализовать с помощью DataModule, но будет пара подводных камней... вот и хочется компонентик нормальный...

Автор: superVad 14.10.2012, 10:00
Цитата(TSerg @  13.10.2012,  17:25 Найти цитируемый пост)
Именно для этого он и придуман.

Если формы создаются динамически и уничтожаются при выходе, то так нарушается целостность. Т.е. уже кто угодно может иметь доступ к датасету формы.
Плюс - надо следить за инициализацией датасетов, закрытием, открытием.


Цитата(DarkProg @  13.10.2012,  13:35 Найти цитируемый пост)
Есть в проекте формы где содержится огромное количество датасетов, порядка 20-30, таких форм не много, но аж глаза разбегаются куда кликнуть, да и датасеты необходимо вечно таскать из стороны в сторону, если надо вдруг передвинуть какую-нибудь кнопочку... В общем мучение ещё то.

Да - проблемно все это. Возможно стоить увеличить окно и перенести все невидимые компоненты в невидимую область и вернуть окну размер.

П.С. может и не целостность нарушается, а инкапсуляция smile как то так вобщем

Автор: DarkProg 14.10.2012, 17:35
Цитата(superVad @  14.10.2012,  11:00 Найти цитируемый пост)
Если формы создаются динамически и уничтожаются при выходе, то так нарушается целостность. Т.е. уже кто угодно может иметь доступ к датасету формы.
Плюс - надо следить за инициализацией датасетов, закрытием, открытием.

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


Цитата(superVad @  14.10.2012,  11:00 Найти цитируемый пост)
Да - проблемно все это. Возможно стоить увеличить окно и перенести все невидимые компоненты в невидимую область и вернуть окну размер.

Это как бы не решение проблемы на мой взгляд...

Автор: superVad 14.10.2012, 17:56
Цитата(DarkProg @  14.10.2012,  16:35 Найти цитируемый пост)
Там фишка будет в том что для каждой такой формы мне нужно будет создавать отдельный экземпляр дата модуля.

Да - вариант.

Цитата(DarkProg @  14.10.2012,  16:35 Найти цитируемый пост)
И быть точно уверенным, что именно этот экземпляр привязан к конкретной форме.

Ну можно создавать в конструкторе формы.

Автор: DarkProg 14.10.2012, 21:50
Цитата(superVad @  14.10.2012,  18:56 Найти цитируемый пост)
Ну можно создавать в конструкторе формы. 

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

Автор: MetalFan 14.10.2012, 22:14
Цитата(DarkProg @  13.10.2012,  14:35 Найти цитируемый пост)
использование DataModule где и будет валятся вся эта гора датасетов, но хотелось бы всё таки компонентик попробовать сваять...

И чем не решение? смысл ваять какой-то компонент, который будет делать то же самое? давать связанному с формой датамодулю схожее имя, например, с префиксом...

Автор: DarkProg 14.10.2012, 23:07
Меня смущает непонятка в написании ссылки, например в DataSource, ведь там пишется имя DataModule на котором лежит конкретный датасет. Всегда ли созданная форма будет ссылаться на тот модуль который я создал... Или вот ссылка на компонент подключения DataModuleBase.ConnectionDase, ведь это у меня так модуль называется, а через точку идёт ссылка на компонент.

Я тут решил поэкспериментировать и получил интересный результат. Если в конкструкторе формы, до inherited Create самой формы прописать создание экземпляра датамодуля, то выглядит так как будто бы каждая форма ссылается на свой модуль, а вот если вдруг создаётся форма у которой в конструкторе нет создания экземпляра модуля, то компоненты на форме начинают ссылаться на уже существующий модуль.
Проверка кто на кого ссылается при помощи разрушения модуля привязанного к форме.

Меня беспокоит такое поведение, потому что пользователи могут учудить такое о чём ни в одной книге не пишут...

Автор: northener 15.10.2012, 01:08
Цитата(DarkProg @  14.10.2012,  23:07 Найти цитируемый пост)
Я тут решил поэкспериментировать и получил интересный результат.

Код в студию!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)