powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Наследование фрейма с TDataSet
41 сообщений из 41, показаны все 2 страниц
Наследование фрейма с TDataSet
    #39924453
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть фрейм-заготовка на котором лежит сетка и набор данных.
Набор данных TUniQuery с пустым свойством SQL и, соответственно, нет persistent-полей.

Есть второй фрейм, который наследуется от первого. Всё шло хорошо, пока я не заполнил у НД свойство SQL и не создал поля.
При создании второго фрейма появляется ошибка: A component named qDataID already exists.
qDataID - это persistent-поле.

Я ведь полей в первом фрейме не создавал, поэтому дублей не должно быть.
В дизайне ошибок нет, только при создании фрейма.

Под фреймами я подразумеваю TUniFrame из UniGUI.

ЧЯДНТ?
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924472
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Обращаешься не в тот форум, имхо.))
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924474
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
В дизайне ошибок нет, только при создании фрейма

В смысле, в рантайме? Тогда похоже, что там пытается создаться ещё один набор полей. Для начала стоит посмотреть стек вызовов в момент ошибки и проследить логику.

X11
ЧЯДНТ?

Про Uni не в курсе. Из общих соображений - я бы не рекомендовал пользоваться persistent полями у SQL-датасетов. Пользы минимум, а геморроя много.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924477
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
В смысле, в рантайме?


ага
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924478
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Тогда похоже, что там пытается создаться ещё один набор полей.


это я понимаю, я не понимаю, почему создается набор полей дважды
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924479
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Про Uni не в курсе. Из общих соображений - я бы не рекомендовал пользоваться persistent полями у SQL-датасетов. Пользы минимум, а геморроя много.


а как мне в DBGrid вывести данные?
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924480
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
X11,

Обращаешься не в тот форум, имхо.))


я ещё не скопил нужную сумму, чтобы там задавать вопросы
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924485
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
а как мне в DBGrid вывести данные?

Точно так же. Persistent поля для этого не нужны (ну... если версия дельфы новее, чем 1.0).
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924486
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
это я понимаю, я не понимаю, почему создается набор полей дважды

Вот это уже может быть вопрос к неизвестному мне TUniFrame.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924546
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
X11
а как мне в DBGrid вывести данные?

Точно так же. Persistent поля для этого не нужны (ну... если версия дельфы новее, чем 1.0).


Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924556
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне
да там масса свойств к-е удобно в дизайне задавать
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924561
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне.

Спасибо, я работал с Delphi 1.0 и помню, как оно там было. Но с тех пор технология немного ушла вперёд, и начиная с 2.0 в гридах появились колонки, в которых это не менее удобно настраивается без persistent fields.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924709
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне.
Удобнее. А при обновлении структуры БД замучаешься искать ошибки. Поэтому лучше это делать все таки в рантайме. В нашей системе все настройки по отображению полей лежат в самой БД в описании поля.

По сути вопроса - смотри dfm всех фреймов и формы на которой они лежат. Скорее всего что-нибудь увидишь
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924712
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
А при обновлении структуры БД замучаешься искать ошибки. Поэтому лучше это делать все таки в рантайме.


Вот не совсем так.
Например, TpFibDataSet умеет автоматически менять параметры persistent-полей при открытии формы в дизайне.

А если бы у меня было всё в pas файлах, то действительно пришлось бы всё править ручками.

Ок, вот, например, UniQuery (DevArt) не умеет так делать, но всё равно - почему в редакторе кода должно быть удобнее?
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924715
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
По сути вопроса - смотри dfm всех фреймов и формы на которой они лежат. Скорее всего что-нибудь увидишь


неа, ничего нету "криминального"

В первом (родительском) фрейме - только НД (снимок экрана)

во втором (дочернем) уже с persistent-полями и поля в единственном экземпляре
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924722
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
В нашей системе все настройки по отображению полей лежат в самой БД в описании поля.

Меня всегда восхищало умение противопоставить одно плохое решение другому плохому решению.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924723
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отбой, не заметил unigui..
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924727
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

покажи такой же снимок для дочернего фрейма
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924734
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
почему в редакторе кода должно быть удобнее?
Потому что пишется одна строка
Код: pascal
1.
2.
3.
4.
procedure AfterOpen(ADataSet: TDataSet);
begin
  ApplyFields(ADataSet);
end;

и где-то в служебных функциях
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure ApplyFields(ADataSet: TDataSet);
var
  LFieldsInfo: TArray<TFieldInfo>
  Li: Integer;
begin
  LFieldsInfo := LoadInfos(ADataSet: TDataSet);
  for Li := 0 to ADataSet.FieldCount - 1 do
    ApplyField(ADataSet.Fields[Li], LFieldsInfo[Li]);
end;


После этого в Description поля заносим всю нужную для отображения информациюИмя;1;16;0Здесь используется такой формат: DisplayLabel;Visible;Width;Align и при модификации поля в БД тут же изменяем его стиль отображения
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924736
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Меня всегда восхищало умение противопоставить одно плохое решение другому плохому решению.
Обоснуешь?
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924740
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
softwarer
Меня всегда восхищало умение противопоставить одно плохое решение другому плохому решению.
Обоснуешь?

Без проблем.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924742
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius,

Такого же точно снимка не будет, потому что в дочернем уже созданы поля, в один снимок всё не влезет.
Запрос большой, плюс много полей, всё в один снимок не влезет, даже в два, наверное, не влезет.
Я сделал так: оставил только одно поле ID и склеил снимок из двух, вырезав SQL запрос:
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924748
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Здесь используется такой формат: DisplayLabel;Visible;Width;Align и при модификации поля в БД тут же изменяем его стиль отображения


А если с программой работают несколько пользователей и все нужны разные настройки столбцов/сеток?
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924758
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
_Vasilisk_
Здесь используется такой формат: DisplayLabel;Visible;Width;Align и при модификации поля в БД тут же изменяем его стиль отображения

А если с программой работают несколько пользователей и все нужны разные настройки столбцов/сеток?

Логично, что в БД хранятся дефолтные, а модификации пишутся локально в реестр и при необходимости (при изменении типа поля, например) - сбрасываются.
Ну я бы так сделал.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924762
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
В первом (родительском) фрейме - только НД (снимок экрана)

Так, чисто наобум - попробуй убрать этот KeyFields. Вдруг он создаёт поле под него, а потом оно конфликтует с полями из дочернего?
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924763
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
100%, что ничего не создаёт, это абсурдно было бы
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924800
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
А если с программой работают несколько пользователей и все нужны разные настройки столбцов/сеток?
Так это дефолты. А настройки для конкретного пользователя (в том числе и порядок колонок в гриде) хранятся в отдельном блобе.
alekcvp
Логично, что в БД хранятся дефолтные, а модификации пишутся локально в реестр
Именно! Только у нас в базу пишутся. Но не суть
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924806
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
А если с программой работают несколько пользователей и все нужны разные настройки столбцов/сеток?
Кстати, интересно как ты решаешь эту проблему, учитывая что у тебя персистентные поля. Учитывая что
X11
Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне.
X11
почему в редакторе кода должно быть удобнее?
Т.е. у тебя проблема многопользовательского интерфейса даже не поднимается
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924863
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
_Vasilisk_
пропущено...
Обоснуешь?

Без проблем.

Тоже интересно
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924867
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

нет, так ничего не видно... может в запросе возвращается два поля ID из разных джойнов?
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924879
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2
Тоже интересно

Для детального ответа надо сначала выяснить, как именно реализовано, но в целом это безвыигрышный вариант: по сути это написание "своей дельфи" в некоторой части процесса, соответственно, нужно либо потратить количество сил, сравнимое с разработкой аналогичных фич дельфы, либо результат будет заведомо хуже. Сходу я, например, уверен, что эти визуальные настройки либо вообще не ложатся в контроль версий, либо ложатся туда в невменяемом виде (например, SQL-скриптами). Как делается их хранение и редактирование... ну, по той comma-separated строчке уже видно. Как они будут сливать изменения, независимо сделанные в одной форме... и как они будут веселиться, когда возникнет необходимость одно из этих изменений задержать и не выкладывать в релиз... И это мы ещё не касаемся упомянутой коллегой необходимостью писать везде обработчик AfterOpen... а заодно не гадаем, как выглядит форма, пока этого Open не произошло (а ведь в ряде интерфейсов, например, сначала вводятся значения фильтров и только потом открывается основной запрос)... в общем, куда ни плюнь, одно сплошное веселье. И главное - только ради того, чтобы было хуже, чем в дельфе.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924933
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Кстати, интересно как ты решаешь эту проблему, учитывая что у тебя персистентные поля. Учитывая что


настройки постоянных полей я нигде не храню, не вижу смысла, не понимаю зачем, а настройки самих сеток - в реестре, в блобе, на выбор пользователя
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924934
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Т.е. у тебя проблема многопользовательского интерфейса даже не поднимается


именно многопользовательский интерфейс: для каждого пользователя хранятся данные в базе отдельно, либо в реестре на одно рабочее место - кто как захочет
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924935
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius
X11,

нет, так ничего не видно... может в запросе возвращается два поля ID из разных джойнов?


Почему тогда они не создаются в редакторе постоянных полей?
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924936
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius
нет, так ничего не видно...


а там ничего и нет, не на что смотреть
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924938
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я провел такой эксперимент.
Скопировал НД, ну т.е. создал такой е, только с другим именем и сетку с DataSource подключил к новому. Запустил - проблем нет. Форма, вернее фрейм создался, НД открылся, в сетке вижу данные. Ошибок нет.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924942
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, я удалил НД на родительском фрейме и создает его на дочернем.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924946
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плавно приходим к нужным решениям :) есть еще вариант - наборы на формы и фреймы вообще не класть, а создавать в рантайме. Если в помощь привлечь GExpert, то это делается несколькими нажатиями кнопок.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924954
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, я понял причину после удаления НД из родительского фрейма, но экспериментировать больше нет желания сейчас.
В родительском фрейме затерялся код открытия НД при показе фрейма не знаю, зачем я это сделал.
Т.е. я открывал НД и в родительском фрейме, и в дочернем.

Прикол в том, что в родительском фрейме был пустой НД, полностью пустой.
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39924959
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аааааа где здесь посыпают голову пеплом?

у меня есть ещё одна дочерняя форма, которая наследуется от первой дочерней
прошу извинить за отнятое время
...
Рейтинг: 0 / 0
Наследование фрейма с TDataSet
    #39925248
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
где здесь посыпают голову пеплом?
Здесь
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Наследование фрейма с TDataSet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]