Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
Есть фрейм-заготовка на котором лежит сетка и набор данных.
Набор данных TUniQuery с пустым свойством SQL и, соответственно, нет persistent-полей.

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

qDataID - это persistent-поле.

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

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

ЧЯДНТ?
9 фев 20, 23:32    [22076413]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
Vlad F
Member

Откуда:
Сообщений: 1112
X11,

Обращаешься не в тот форум, имхо.))
10 фев 20, 00:50    [22076443]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60791
Блог
X11
В дизайне ошибок нет, только при создании фрейма

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

X11
ЧЯДНТ?

Про Uni не в курсе. Из общих соображений - я бы не рекомендовал пользоваться persistent полями у SQL-датасетов. Пользы минимум, а геморроя много.
10 фев 20, 00:53    [22076446]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
softwarer
В смысле, в рантайме?


ага
10 фев 20, 00:59    [22076449]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
softwarer
Тогда похоже, что там пытается создаться ещё один набор полей.


это я понимаю, я не понимаю, почему создается набор полей дважды
10 фев 20, 00:59    [22076450]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
softwarer
Про Uni не в курсе. Из общих соображений - я бы не рекомендовал пользоваться persistent полями у SQL-датасетов. Пользы минимум, а геморроя много.


а как мне в DBGrid вывести данные?
10 фев 20, 01:00    [22076451]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
Vlad F
X11,

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


я ещё не скопил нужную сумму, чтобы там задавать вопросы
10 фев 20, 01:03    [22076452]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60791
Блог
X11
а как мне в DBGrid вывести данные?

Точно так же. Persistent поля для этого не нужны (ну... если версия дельфы новее, чем 1.0).
10 фев 20, 01:12    [22076459]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60791
Блог
X11
это я понимаю, я не понимаю, почему создается набор полей дважды

Вот это уже может быть вопрос к неизвестному мне TUniFrame.
10 фев 20, 01:15    [22076460]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
softwarer
X11
а как мне в DBGrid вывести данные?

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


Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне.
10 фев 20, 10:05    [22076533]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
vavan
Member

Откуда: Казань
Сообщений: 3483
X11
Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне
да там масса свойств к-е удобно в дизайне задавать
10 фев 20, 10:30    [22076552]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60791
Блог
X11
Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне.

Спасибо, я работал с Delphi 1.0 и помню, как оно там было. Но с тех пор технология немного ушла вперёд, и начиная с 2.0 в гридах появились колонки, в которых это не менее удобно настраивается без persistent fields.
10 фев 20, 10:36    [22076560]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11503
X11
Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне.
Удобнее. А при обновлении структуры БД замучаешься искать ошибки. Поэтому лучше это делать все таки в рантайме. В нашей системе все настройки по отображению полей лежат в самой БД в описании поля.

По сути вопроса - смотри dfm всех фреймов и формы на которой они лежат. Скорее всего что-нибудь увидишь
10 фев 20, 15:38    [22076885]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
_Vasilisk_
А при обновлении структуры БД замучаешься искать ошибки. Поэтому лучше это делать все таки в рантайме.


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

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

Ок, вот, например, UniQuery (DevArt) не умеет так делать, но всё равно - почему в редакторе кода должно быть удобнее?
10 фев 20, 15:50    [22076891]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
_Vasilisk_
По сути вопроса - смотри dfm всех фреймов и формы на которой они лежат. Скорее всего что-нибудь увидишь


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

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

во втором (дочернем) уже с persistent-полями и поля в единственном экземпляре

К сообщению приложен файл. Размер - 51Kb
10 фев 20, 15:54    [22076896]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60791
Блог
_Vasilisk_
В нашей системе все настройки по отображению полей лежат в самой БД в описании поля.

Меня всегда восхищало умение противопоставить одно плохое решение другому плохому решению.
10 фев 20, 15:57    [22076903]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
alekcvp
Member

Откуда:
Сообщений: 1861
Отбой, не заметил unigui..

Сообщение было отредактировано: 10 фев 20, 15:58
10 фев 20, 15:57    [22076904]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1412
X11,

покажи такой же снимок для дочернего фрейма
10 фев 20, 16:03    [22076912]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11503
X11
почему в редакторе кода должно быть удобнее?
Потому что пишется одна строка
procedure AfterOpen(ADataSet: TDataSet);
begin
  ApplyFields(ADataSet);
end;
и где-то в служебных функциях
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 и при модификации поля в БД тут же изменяем его стиль отображения
10 фев 20, 16:13    [22076922]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11503
softwarer
Меня всегда восхищало умение противопоставить одно плохое решение другому плохому решению.
Обоснуешь?
10 фев 20, 16:15    [22076925]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60791
Блог
_Vasilisk_
softwarer
Меня всегда восхищало умение противопоставить одно плохое решение другому плохому решению.
Обоснуешь?

Без проблем.
10 фев 20, 16:21    [22076932]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
Zelius,

Такого же точно снимка не будет, потому что в дочернем уже созданы поля, в один снимок всё не влезет.
Запрос большой, плюс много полей, всё в один снимок не влезет, даже в два, наверное, не влезет.
Я сделал так: оставил только одно поле ID и склеил снимок из двух, вырезав SQL запрос:

К сообщению приложен файл. Размер - 45Kb
10 фев 20, 16:24    [22076938]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
_Vasilisk_
Здесь используется такой формат: DisplayLabel;Visible;Width;Align и при модификации поля в БД тут же изменяем его стиль отображения


А если с программой работают несколько пользователей и все нужны разные настройки столбцов/сеток?
10 фев 20, 16:28    [22076945]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
alekcvp
Member

Откуда:
Сообщений: 1861
X11
_Vasilisk_
Здесь используется такой формат: DisplayLabel;Visible;Width;Align и при модификации поля в БД тут же изменяем его стиль отображения

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

Логично, что в БД хранятся дефолтные, а модификации пишутся локально в реестр и при необходимости (при изменении типа поля, например) - сбрасываются.
Ну я бы так сделал.
10 фев 20, 16:52    [22076965]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60791
Блог
X11
В первом (родительском) фрейме - только НД (снимок экрана)

Так, чисто наобум - попробуй убрать этот KeyFields. Вдруг он создаёт поле под него, а потом оно конфликтует с полями из дочернего?
10 фев 20, 17:01    [22076972]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
100%, что ничего не создаёт, это абсурдно было бы
10 фев 20, 17:02    [22076974]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11503
X11
А если с программой работают несколько пользователей и все нужны разные настройки столбцов/сеток?
Так это дефолты. А настройки для конкретного пользователя (в том числе и порядок колонок в гриде) хранятся в отдельном блобе.
alekcvp
Логично, что в БД хранятся дефолтные, а модификации пишутся локально в реестр
Именно! Только у нас в базу пишутся. Но не суть
10 фев 20, 17:50    [22077029]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11503
X11
А если с программой работают несколько пользователей и все нужны разные настройки столбцов/сеток?
Кстати, интересно как ты решаешь эту проблему, учитывая что у тебя персистентные поля. Учитывая что
X11
Настраивать, вводить локализованные названия в DisplayCaption удобно в дизайне.
X11
почему в редакторе кода должно быть удобнее?
Т.е. у тебя проблема многопользовательского интерфейса даже не поднимается
10 фев 20, 17:53    [22077035]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
Василий 2
Member

Откуда:
Сообщений: 965
softwarer
_Vasilisk_
пропущено...
Обоснуешь?

Без проблем.

Тоже интересно
10 фев 20, 18:52    [22077097]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1412
X11,

нет, так ничего не видно... может в запросе возвращается два поля ID из разных джойнов?
10 фев 20, 18:55    [22077102]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60791
Блог
Василий 2
Тоже интересно

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

Сообщение было отредактировано: 10 фев 20, 19:02
10 фев 20, 19:01    [22077114]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
_Vasilisk_
Кстати, интересно как ты решаешь эту проблему, учитывая что у тебя персистентные поля. Учитывая что


настройки постоянных полей я нигде не храню, не вижу смысла, не понимаю зачем, а настройки самих сеток - в реестре, в блобе, на выбор пользователя
10 фев 20, 20:54    [22077188]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
_Vasilisk_
Т.е. у тебя проблема многопользовательского интерфейса даже не поднимается


именно многопользовательский интерфейс: для каждого пользователя хранятся данные в базе отдельно, либо в реестре на одно рабочее место - кто как захочет
10 фев 20, 20:55    [22077189]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
Zelius
X11,

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


Почему тогда они не создаются в редакторе постоянных полей?

К сообщению приложен файл. Размер - 17Kb
10 фев 20, 20:56    [22077190]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
Zelius
нет, так ничего не видно...


а там ничего и нет, не на что смотреть
10 фев 20, 20:57    [22077191]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
Я провел такой эксперимент.
Скопировал НД, ну т.е. создал такой е, только с другим именем и сетку с DataSource подключил к новому. Запустил - проблем нет. Форма, вернее фрейм создался, НД открылся, в сетке вижу данные. Ошибок нет.
10 фев 20, 21:02    [22077193]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
Короче, я удалил НД на родительском фрейме и создает его на дочернем.
10 фев 20, 21:13    [22077200]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3524
плавно приходим к нужным решениям :) есть еще вариант - наборы на формы и фреймы вообще не класть, а создавать в рантайме. Если в помощь привлечь GExpert, то это делается несколькими нажатиями кнопок.
10 фев 20, 21:30    [22077211]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
Возможно, я понял причину после удаления НД из родительского фрейма, но экспериментировать больше нет желания сейчас.
В родительском фрейме затерялся код открытия НД при показе фрейма не знаю, зачем я это сделал.
Т.е. я открывал НД и в родительском фрейме, и в дочернем.

Прикол в том, что в родительском фрейме был пустой НД, полностью пустой.

Сообщение было отредактировано: 10 фев 20, 22:08
10 фев 20, 22:08    [22077236]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13870
аааааа где здесь посыпают голову пеплом?

у меня есть ещё одна дочерняя форма, которая наследуется от первой дочерней
прошу извинить за отнятое время
10 фев 20, 22:39    [22077252]     Ответить | Цитировать Сообщить модератору
 Re: Наследование фрейма с TDataSet  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11503
X11
где здесь посыпают голову пеплом?
Здесь
11 фев 20, 15:31    [22077680]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить