Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Наследование фрейма с 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
Сообщений: 60789
Блог
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
Сообщений: 60789
Блог
X11
а как мне в DBGrid вывести данные?

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

Откуда: 127.0.0.1
Сообщений: 60789
Блог
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
Сообщений: 60789
Блог
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
Сообщений: 60789
Блог
_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
Сообщений: 60789
Блог
_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
Сообщений: 60789
Блог
X11
В первом (родительском) фрейме - только НД (снимок экрана)

Так, чисто наобум - попробуй убрать этот KeyFields. Вдруг он создаёт поле под него, а потом оно конфликтует с полями из дочернего?
10 фев 20, 17:01    [22076972]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить