![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Окна редактирования записей таблиц(справочников)
StriderMan © (2007-07-31 11:07:00)не знаю в тему или нет, перенесите если что
Т.к. таблиц двольно много, и как правило операции с ними одинаковые, сделали что-то типа справочников в 1С, т.е. есть некий базовый класс от датамодуля, он умеет выполнять типовые действия (редактирование, удаление, вставка и т.д.), в том числе показывать визуальные формы редактирования элемента и списка. В наследниках только определяются наборы данных и конкретные формы для редактирования (у которых тоже есть базовый класс) . Однако некоторые моменты еще требуют доработки.
Мастера, расскажите как у вас организовано редактирование элементов таблиц(справочников). Это просто формы или какая-то иерархия форм? А может автоматические построители форм? как со списками дела обстоят?
Как вообще организовано управление таблицами (удаление, вставка, редактирование): для каждой таблицы свой код или какие-то базовые классы есть?
или ткните что почитать на эту тему, плз.
MsGuns (2007-08-06 09:48:00) [1]Универсализация интерфейса работы со всем многообразием "справочников" средствами чисто Делфи суть опасная блажь, со временем аукнется большими проблемами
clickmaker (2007-08-03 14:30:00) [2]
> а форма элемента?
кстати, делал и такую. Динамическое создание полей ввода соответственно типам полей. Строка - Edit, Дата - DTPicker, Bool - флажок и т.д. Все на скроллбоксе на всякий случай.
Делал также вариант, когда имя-значение отображались в одном списке в виде гиперссылок. При щелчке открывался маленький диалог с соотв. полем ввода.
StriderMan (2007-08-03 12:10:00) [3]
> да. Description можно задать и при визуальном проектировании таблицы
В FB похоже тоже есть. По крайней мере из системной таблицы можно вытащить RDB$RELATIONS.RDB$DESCRIPTION
clickmaker (2007-08-03 12:02:00) [4]
> это форма списка. а форма элемента? или их нет?
ну для тех справочников, которые я делал, прямо в гриде редактирование
> где эти названия хранятся реально? Это встроенная фича MSSQL?
да. Description можно задать и при визуальном проектировании таблицы
StriderMan (2007-08-03 12:00:00) [5]
> Одна универсальная форма с гридом и кнопками
это форма списка. а форма элемента? или их нет?
> Русские заголовки таблиц и полей добавляются через sp_addextendedproperty
> 'MS_Description', читаются через
> sp_getextendedproperty
недопонял. где эти названия хранятся реально? Это встроенная фича MSSQL?
clickmaker (2007-08-03 11:41:00) [6]
> Мастера, расскажите как у вас организовано редактирование
> элементов таблиц(справочников).
несколько таблиц-справочников. Русские заголовки таблиц и полей добавляются через sp_addextendedproperty 'MS_Description', читаются через
sp_getextendedproperty.
Одна универсальная форма с гридом и кнопками + 1 query + UpdateSQL, скрипты для которого составляются динамически по списку полей.
StriderMan (2007-08-03 11:30:00) [7]
> Игорь Шевченко © (02.08.07 18:44) [15]
Как все похоже :) кстати тоже интерфейсы использую.
> На этот случай написан генератор кода
вот этого еще нет
> У дураков мысли сходятся ? :)
> Или одного и того же Фаулера читали ?
Видимо первое :) Фаулера не читал.
Игорь Шевченко (2007-08-03 10:05:00) [8]Gadenysh (02.08.07 19:44) [17]
> прям мануал к моей системе)
> и генератор тоже есть))
У дураков мысли сходятся ? :)
Или одного и того же Фаулера читали ?
Gadenysh (2007-08-02 19:44:00) [9]
> Игорь Шевченко © (02.08.07 18:44) [15]
прям мануал к моей системе)
и генератор тоже есть))
Игорь Шевченко (2007-08-02 18:46:00) [10]
> но если будет 100 сущностей? будет и 100 датамодулей и 100
> TEditFormов?
На этот случай написан генератор кода, который по описанию сущности генерирует заготовки для всех вышеуказанных форм, датамодулей, объектов и интерфейсов. В случае простых объектов, тех же справочников, результат работы генератора можно включать сразу в проект, в случае сложных объектов, с коллекциями внутри, приходится дорабатывать сгенерированный код вручную.
Игорь Шевченко (2007-08-02 18:44:00) [11]как делаю я -
есть Template для формы редактирования с кнопками Ok и Cancel и с методами DisplayObject и FillObject
есть Template для формы списка, натурально с гридом по вкусу, DataSource и с Actions Add, Update, Delete, Aggregate, Filter, Print, Excel.
Эта форма может вызываться как модальная и как не модальная. В первом случае еще две кнопки Ok и Cancel.
есть Template для датамодуля, реализующего два интерфейса - один для получения DataSet для того самого списка, а второй для загрузки объекта по ключевым полям и сохранения объекта (с указанием новый или существующий).
И есть объекты, собственно предметной области.
Все формы работают с методами интерфейсов, не зная, кто их реализует, все формы редактирования работают с объектами, а не с полями в записях.
Вот так.
StriderMan (2007-08-02 16:52:00) [12]
> Jeer © (02.08.07 14:42) [13]
> Для этого есть репозиторий.
та я ж не для себя хочу. у меня тоже в репозитории есть.
Сделать компоненты, выложить на torry.
Jeer (2007-08-02 14:42:00) [13]
> есть даже некоторое желание оформить все это в виде готовых
> компонентов
?
Для этого есть репозиторий.
Пример такой формы:
http://slil.ru/24694370
StriderMan (2007-08-02 13:13:00) [14]
> Petr V. Abramov © (02.08.07 12:22) [11]
это вселяет оптимизм :))
есть даже некоторое желание оформить все это в виде готовых компонентов, пусть народ пользуется :)
типа "подключи БД за 5 минут" :))
Petr V. Abramov (2007-08-02 12:22:00) [15]> StriderMan © (31.07.07 11:52) [8]
тоже самое
StriderMan (2007-07-31 12:35:00) [16]
> но если будет 100 сущностей? будет и 100
> датамодулей и 100 TEditFormов?
> а если проект динамичный, и множество разработчиков? тады
> задолбаетесь новые формочки клепать...
именно так сейчас дела и обстоят :)))
> можно канечно на пакеты разбить:
до этого пока не дожили :)
SlymRO (2007-07-31 12:02:00) [17]конечно крут :) но если будет 100 сущностей? будет и 100 датамодулей и 100 TEditFormов?
а если проект динамичный, и множество разработчиков? тады задолбаетесь новые формочки клепать...
можно канечно на пакеты разбить: в пакетах формы для сущьностей...
в пакете RegisterEditor('PapaEdit',TPapaEdit)
CreateEditor(const EditName)
if FindEditor(EditName,Editor) then
return Editor
else return DefaultEditor;
и один DefaultEditForm с динамическим клепанием контролов для заглушки
StriderMan (2007-07-31 11:52:00) [18]
> SlymRO © (31.07.07 11:41) [6]
> придется динамически контролы клепать...
я немного другим путем пошел - базовый класс формы (TCustomEditForm) с кнопкми ОК и ОТМЕНА и с логикой в коде. а в наследниках добрасываю контролов на форму и прописываю связи с полями и все.
Базовый класс датамодуля имеет абстрактный метод типа
function GetEditForm: TCustomEditForm; virtual; abstract;
а наследники-датамодули уже возвращают неабстрактные формы в этом методе
SlymRO (2007-07-31 11:45:00) [19]http://www.delphimaster.ru/articles/bdform/index.html
SlymRO (2007-07-31 11:41:00) [20]StriderMan © (31.07.07 11:28) [3]
придется динамически контролы клепать... но ето не проблема: бежим по полям и делаем контролы нужного типа...
или форма с контейнером (фрейм например) и динамически загружать в него содержимое из базы. недостаток: придется для каждого обекта в дизайнере таки ручками прототип делать...
но если скрестить оба метода должно ниплохо получиться