|
|
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
ёёёёё Ответы обязательно должны учитывать твои заблуждения? Если вы не можете помочь, то зачем вообще реагировать на топик ? Расскажите как у вас устроено редактирование подобного (составного) поля в гриде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 11:03 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich Потом пользователь становится на третью строчку и тоже меняет адрес, уже нужно помнить два значения, для второй и для третей строки ? Создать на сервере функцию, возвращающую адрес по набору кодов; вызывать с новыми значениями из полей датасета после их изменения / установки; результат, только для отображения, записывать или в поле Address или "в соседнее" (тогда через GetDisplayText). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 11:11 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
ma1tus результат, только для отображения, записывать или в поле Address или "в соседнее" (тогда через GetDisplayText). Да как в него записать, если оно ReadOnly ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 11:15 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich Да как в него записать, если оно ReadOnly ? добавь в запрос null as "соседнее_поле" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 11:25 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Del ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 11:25 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
ma1tus добавь в запрос null as "соседнее_поле" Добавил, но оно тоже ReadOnly. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 11:30 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich, У вас адрес - Lookup-поле? Или вы его физически протянули в НД? Т.е. грид у вас привязан к одному запросу, в т.ч. и поле "Адрес"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 11:39 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
goldmi45 Т.е. грид у вас привязан к одному запросу, в т.ч. и поле "Адрес"? Грид привязан к датасету, поле Адрес - результат функции которая формирует текст по 4 значениям таблички (CITY_ID,STREET_ID,HOUS_ID,APPARTMENT_NUMBER) Код: sql 1. У вас адрес - Lookup-поле? Классический Лукап - это поле ID в исходном Датасете и отдельный Датасет с перечнем подстановочных значений. У меня 4 поля в датасете и пятое Адрес - текстовая сборка с четырёх справочников. Я на колонке Адрес повесил редактор cxButtonEdit, по нажатию кнопки выбираю новый Адрес, полученные 4 значения присваиваю в Датасет. Теперь нужно как то изменить текст в поле Адрес. Поле ReadOnly так как это результат функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 12:00 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich оно тоже ReadOnly. Что мешает поменять для него эту настройку ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 12:03 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich Код: sql 1. У вас адрес - Lookup-поле? Классический Лукап - это поле ID в исходном Датасете и отдельный Датасет с перечнем подстановочных значений. У меня 4 поля в датасете и пятое Адрес - текстовая сборка с четырёх справочников. Я на колонке Адрес повесил редактор cxButtonEdit, по нажатию кнопки выбираю новый Адрес, полученные 4 значения присваиваю в Датасет. Теперь нужно как то изменить текст в поле Адрес. Поле ReadOnly так как это результат функции. Т.е. на вход функции ReturnAddress передаётся идентификатор человека, а не адрес??? Тогда пока новый адрес не запишется в таблицу, откуда функция берёт значение - никак. Вариант - править ReturnAddress (или делать новую функцию), чтобы она по адресу (идентификатор улицы, номер дома, квартиры) формировала строку, которую можно было вызвать на клиенте, передавая в неё новые данные. Тогда это поле (Адрес) можно сделать Lookup. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 12:14 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
ma1tus Что мешает поменять для него эту настройку ? Код: pascal 1. 2. 3. 4. goldmi45Вариант - править ReturnAddress (или делать новую функцию), чтобы она по адресу (идентификатор улицы, номер дома, квартиры) формировала строку, которую можно было вызвать на клиенте, передавая в неё новые данные. Тогда это поле (Адрес) можно сделать Lookup. А Lookup по какому полю ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 12:26 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich Код: pascal 1. 2. 3. 4. Для используемого датасета не существует возможности (путем собственно SQL) задать, какие именно поля полетят на сервер - ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 12:40 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
ma1tus Для используемого датасета не существует возможности (путем собственно SQL) задать, какие именно поля полетят на сервер - ? Не знаю. Используется ADOQuery. Где можно задать какие поля полетят на сервер ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 12:51 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich goldmi45Вариант - править ReturnAddress (или делать новую функцию), чтобы она по адресу (идентификатор улицы, номер дома, квартиры) формировала строку, которую можно было вызвать на клиенте, передавая в неё новые данные. Тогда это поле (Адрес) можно сделать Lookup. А Lookup по какому полю ? При формировании lookup-поля задаются key fields и lookup keys. Т.е. можно по нескольким полям сделать lookup. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 13:05 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich, а вообще, можно сделать поле адрес - вычисляемым (calc) и в событии OnCalcField вычислять его по другим полям. Тогда будет то поведение, которое вы хотите: Вы будете устанавливать 4 поля адреса, эти 4 поля будут передаваться в процедуру, которая по ним будет возвращать строку адреса, и вот эту строку вы и будете отображать в гриде. Тогда при нажатии ESC вернутся старые значения полей. Теоретически такое можно конечно сделать. Но если у вас в гриде будет 100500 человек, то будет 100500 запросов по адресу. И всё это ради того, чтобы пользователь имел возможность нажать ESC, если он увидел, что неправильно ввёл адрес до того, как этот адрес улетел на сервер. И встаёт вопрос "зачем такое поведение"? Сделайте процедуру, которая возвращает людей и их адреса Field type commentEMPLOYEE_ID integer идентификаторEMP_FIO string ФИОCITY_ID integer к справочнику городовSTREET_ID integer к справочнику улицHOUS_ID integer к справочнику домовAPPARTMENT_NUMBER integerADDRESS string адрес В гриде отображаете 2 поля - ФИО и адрес. У поля адрес делаете кнопку "редактировать", по кнопке поднимаете диалог с выбором адреса. Как только пользователь выберет адрес (т.е. будут готовы все 4 поля), вы записываете этот адрес в базу. Потом делаете рефреш данных (или одной записи, если позволяет датасет) и позиционируетесь на запись, которую пользователь редактировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 13:36 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
goldmi45 При формировании lookup-поля задаются key fields и lookup keys. Т.е. можно по нескольким полям сделать lookup. Тогда Датасет для Лукапа нужно построить не по всем возможным адресам, а только по тем которые есть в результирующем наборе ? Получается, открываем запрос из EMPLOYEE, потом пробегаем по всему полученному датасету и складываем в отдельный Датасет для Лукапа поля 1+2+3+4 и Адрес. А на сервере формируем такое же комбинированное поле 1+2+3+4. Код: sql 1. 2. 3. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 13:52 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich Простите, что поднимаю старый топик. Прочитал пару раз, но решения так и не понял. Есть набор данных, где одна из колонок Адрес - результат работы функции, которая собирает слова Город, Улица, Дом, Квартира в один стринг. Код: sql 1. 2. Структура такая Код: sql 1. 2. 3. 4. 5. В гриде у этого поля (Address) редактор TcxButtonEdit Пользователь нажимает на кнопку, открывается Дерево городов, раскрывая узел показываются улицы, далее номера домов. Выбирая нужный адрес, возвращаются набор значений (CITY_ID,STREET_ID,HOUS_ID,APPARTMENT_NUMBER), на которые нужно поменять редактирумую строку, и каким то образом нужно изменить текст в колонке Адрес на вновь выбранный. Подскажите, как это сделать. Может нужно какой то другой компонент для редактирования в гриде ? Я конечно извиняюсь, но у Вас лыжи в гамаке из-за неправильной организации данных в БД. У Вас нарушение 5 нормальной формы, иными словами, судя по Вашему алгоритму действий, атрибуты, которые Вы пытаетесь хранить в таблице взаимозависимы. Если HOUS_ID является последним элементом в Вашей иерархии, то в таблице храните только это значение, если-же последним элементом иерархии является номер комнаты, то достаточно в таблице хранить только уникальный индекс комнаты. Зная уникальный номер комнаты вы всегда можете восстановить (вычислить) и дом, и улицу и город. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 04:50 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
zeon11 Зная уникальный номер комнаты вы всегда можете восстановить (вычислить) и дом, и улицу и город. Хранить квартиры (впрочем как и дома) в отдельной табличке нет необходимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 08:05 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich, Тогда храни только улицы. После коммита ID улицы на сервер, вычитывай на клиента вычисляемое поле , напр. FullAddress, где будут отражаться "Страна+Область+Город+Улица", ну и отдельными полями, если надо, дом и квартира ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 09:27 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
zeon11 Тогда храни только улицы. После коммита ID улицы на сервер, вычитывай на клиента вычисляемое поле , напр. FullAddress, где будут отражаться "Страна+Область+Город+Улица", ну и отдельными полями, если надо, дом и квартира Не важно что хранить. Важно понять(разработать) методику "составного Лукапа" и способ редактирования его в гриде. Наверняка у каждого есть такой Лукап, но все почему то молчат как у них это реализовано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 09:49 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Ну как уже сказал кто-то выше, редактировать прямо в гриде на определенном жизненном этапе перестает казаться правильным :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 09:52 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich zeon11 Тогда храни только улицы. После коммита ID улицы на сервер, вычитывай на клиента вычисляемое поле , напр. FullAddress, где будут отражаться "Страна+Область+Город+Улица", ну и отдельными полями, если надо, дом и квартира Не важно что хранить. Важно понять(разработать) методику "составного Лукапа" и способ редактирования его в гриде. Наверняка у каждого есть такой Лукап, но все почему то молчат как у них это реализовано У меня такой был, но потом потерялся в 90-х, за ненадобностью. Но если серьёзно хочется, то сделай маленькую формочку, которую вызывай по событию выпадающего списка какого-либо лукапа и передавай туда фокус ввода. Естественно положение этой формочки при отображении надо рассчитывать, чтобы она выглядела по-месту, как выпадающий список. На показ стандартного лукапа надо поставить заглушку. Ну, а в самой показываемой форме делай какие хочешь компоненты отображения, запросы, деревья и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 10:10 |
|
||
|
Расскажите, как вы организуете редактирование связанных табличек (в гриде, например)
|
|||
|---|---|---|---|
|
#18+
Petrashkevich, ещё, как вариант, сделать датасет в памяти, с ним резвиться, накатывать изменения, откатывать, и только когда пользователь созрел, отправлять данные на сервер. А лучше, всё-таки, об этом уже тут говорили, сделать редактируемую карточку записи и пускай пользователь что хочет, то и делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 10:27 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39932917&tid=2038531]: |
0ms |
get settings: |
8ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 401ms |

| 0 / 0 |
