Ввод данных в форме из связанной таблицы

Автор Jack-B, 19 июня 2018, 07:53

0 Пользователи и 1 гость просматривают эту тему.

Jack-B

Вроде ситуация не сложная, но как это делается не смог нигде найти.
Есть две таблицы "районы" с полями id, name, group_id
и "группы районов" с полями id, name.
В группах есть записи 0 - северная, 1 - западная и т.д.
Таблицы связаны полями "районы".group_id - "группы районов".id
Хочется сделать форму для заполнения таблицы "районы" но чтобы в поле group_id вбивать не циферки, а выбирать название из таблицы "группы районов", а id подставлять автоматически.

Jack-B

Хех. Если долго мучиться, что нибудь получится.
Вот что получилось у меня:
1. Делается форма на основе таблицы "Районы" (не в виде таблицы)
2. Поле ввода group_id меняем на список
3. Входим в группу group_id и меняем свойства списка
3.1 Делаем список "Раскрываемый" - "да"
3.2 Во вкладке "Данные" поле "Поле данных" остаётся без изменения (group_id) - оно будет меняться в таблице при изменении поля
3.2 "Тип содержимого списка" меняется на "SQL [встроенный]" (чем встроенный от не встроенного отличается не знаю, может знающие в комментариях подскажут)
3.3 "Содержимое списка" указывается SQl запрос SELECT "name", "id" FROM "Группы районов" Тут важный момент, в запросе два поля. Первое отображается в списке, поэтому если поменять их местами то будут отображаться идентификаторы групп. Поэтому сначала в SELECT указывается поле "name".
3.4 "Связываемое поле" - это то поле которое будет подставляться из нашего запроса в таблицу "Районы" в соответствии с выбором. Указывается по номеру с нумерацией начинающейся с нуля. В запросе id стоит вторым по счёту, значит ставится 1.

В общем получилось вроде так. Может знатоки поправят что можно сделать лучше. Может кому пригодится.

economist

Насчет "SQL [встроенный]" - есть два предположения:

1) "SQL [встроенный]" - это значит хранящийся в самом ODB-файле (некоторые движки СУБД поддерживают "хранимые процедуры" и запросы, а ODB-файл может быть только "тонким клиентом" к ним, иначе говоря быть "строкой подключения";

2) "SQL [встроенный]" - это SQL[Native] - значит это режим передачи текста SQL-запроса в саму БД не через парсер BASE, а мимо него. За это же отвечает таинственная кнопка [SQL] в тулбаре и код на StarBasic вида:

RowSet.EscapeProcessing=FALSE

Если их не использовать - строка SQL-запроса в файле ODB искажается, имена "обкавычиваются", запрос часто
перестает работать, но зато иногда работают другие фишки, например запросы с интерактивным вводом параметров (фишка самого BASE)
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Kadet

#3
Цитата: Jack-B от 20 июня 2018, 04:303.4 "Связываемое поле" - это то поле которое будет подставляться из нашего запроса в таблицу "Районы" в соответствии с выбором. Указывается по номеру с нумерацией начинающейся с нуля. В запросе id стоит вторым по счёту, значит ставится 1.
Где ставить "Связываемое поле"? Не нашёл.
И ещё - при выборе из списка - показывает "name" (допустим "западный"), но стоит перейти на другое поле - поле обнуляется. В таблицу записываются нули.

Jack-B

Цитата: Kadet от  8 августа 2018, 14:39Где ставить "Связываемое поле"? Не нашёл.
Когда создаётся форма с помощью мастера, поле ввода автоматически группируется с текстовой подписью. Чтобы открыть именно свойства поля надо сделать клик правой кнопкой на поле -> группировка -> зайти в группу. После этого двойной клик на поле откроет свойства этого поля ввода.