Форма, зависимая от двух элементов управления

Автор senswet, 29 марта 2020, 18:34

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

senswet

Можно ли сделать форму, зависимую от двух элементов управления, принадлежащих родительской форме?
Например: в главной форме две таблицы, выбором элементов в которых происходит выборка в таблице дочерней формы.

economist

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

senswet

Цитата: economist от 29 марта 2020, 19:25
Можно, заданием соотв. свойств (SQL запрос). А что не удастся через свойства - можно изменить макросом.   
Какие свойства и где нужно задать? Как через SQL связываются родительская и дочерняя формы?

bk

#3
//Какие свойства и где нужно задать? Как через SQL связываются родительская и дочерняя формы?

Дочерняя форма уже связана с родительской. В зависимости от ситуации Ваша задача:
- либо источником данных для дочерней формы сделать SQL-запрос и связать форму с родительской по нужному полю (но в этом случае, как я понимаю задачу, вряд ли возможен выбор по двум таблицам родительской формы)
- либо и скорее всего - на событие "выбор элемента в таблицах главной формы" назначить макрос, который обновляет таблицу в дочерней форме. Т.е. в макросе назначаются переменные (то, что выбрали в главной форме) и эти переменные подставляются в SQL-запрос, который является источником данных для дочерней формы. И все это в макросе. По идее код короткий.
//"выбор элемента в таблицах главной формы" - имеется ввиду та операция, которую и как Вы производите с таблицами главной формы. Нажатие кнопки или ещё что...

senswet

Цитата: bk от  1 апреля 2020, 10:57
Дочерняя форма уже связана с родительской. В зависимости от ситуации Ваша задача:
- либо источником данных для дочерней формы сделать SQL-запрос и связать форму с родительской по нужному полю (но в этом случае, как я понимаю задачу, вряд ли возможен выбор по двум таблицам родительской формы)
- либо и скорее всего - на событие "выбор элемента в таблицах главной формы" назначить макрос, который обновляет таблицу в дочерней форме. Т.е. в макросе назначаются переменные (то, что выбрали в главной форме) и эти переменные подставляются в SQL-запрос, который является источником данных для дочерней формы. И все это в макросе. По идее код короткий.
//"выбор элемента в таблицах главной формы" - имеется ввиду та операция, которую и как Вы производите с таблицами главной формы. Нажатие кнопки или ещё что...

Спасибо за ответ. Тоже догадывался, что первым способом не получится, потому что источник данных у родительской формы в классическом варианте - только один. Раньше с макросами не работал, поэтому придется изучать с нуля.

bk

В принципе есть и третий способ. Опять же, как стоит задача: в режиме конструктора создать форму с двумя субформами. Т.е. три уровня получается: Главная-субформа-субформа2. Затем связывать поля таблиц в свойствах. В навигаторе форм добавлять. Тут макрос не нужен.

senswet

#6
Цитата: bk от  2 апреля 2020, 14:11
В принципе есть и третий способ. Опять же, как стоит задача: в режиме конструктора создать форму с двумя субформами. Т.е. три уровня получается: Главная-субформа-субформа2. Затем связывать поля таблиц в свойствах. В навигаторе форм добавлять. Тут макрос не нужен.

Субформу можно связать только с одной родительской формой. Вы  предлагаете связать субформу-2 сразу с главной формой и субформой, но этого не получается сделать. В вашем примере субформа-2 будет подчиняться субформе, но не будет зависеть от главной формы.

bk

//Субформу можно связать только с одной родительской формой. Вы  предлагаете связать субформу-2 сразу с главной формой и субформой, но этого не получается сделать. В вашем примере субформа-2 будет подчиняться субформе, но не будет зависеть от главной формы.

В навигаторе форм: на родительскую форму добавляете субформу1 (там это будет выглядеть как Добавить форму). Назначаете этой субформе1 источник данных. Затем на эту субформу1 добавляете элемент управления таблица. В свойствах таблицы связываете её поля с полями родительской.
Затем то же повторяете уже на уровень ниже: на субформу1 добавляете субформу2, назначаете субформе 2 источник данных и затем на нее элемент управления таблицу, нужные поля которой потом связываете с нужными полями в таблице субформы1. Если ничего не напутал, должно работать (вчера на своем приложении делал в тестовом режиме, правда наборы данных не выверял).

senswet

Цитата: bk от  3 апреля 2020, 20:20В навигаторе форм: на родительскую форму добавляете субформу1 (там это будет выглядеть как Добавить форму). Назначаете этой субформе1 источник данных. Затем на эту субформу1 добавляете элемент управления таблица. В свойствах таблицы связываете её поля с полями родительской.
Затем то же повторяете уже на уровень ниже: на субформу1 добавляете субформу2, назначаете субформе 2 источник данных и затем на нее элемент управления таблицу, нужные поля которой потом связываете с нужными полями в таблице субформы1. Если ничего не напутал, должно работать (вчера на своем приложении делал в тестовом режиме, правда наборы данных не выверял).
Это работает, но не так, как нужно. Данные в субформе-2 подчиняются источнику данных в субформе-1, который в свою очередь подчиняется данным в главной форме. Выбирая строку таблицы в главной форме, происходит выборка в субформе-1, затем выбирая в субформе-1 происходит выборка в субформе-2. Мне же нужно, чтобы субформа-1 не зависела от главной формы. То есть нужны два независимых источника данных, выбором элементов в которых происходила бы фильтрация в третьей таблице.

bk

//То есть нужны два независимых источника данных, выбором элементов в которых происходила бы фильтрация в третьей таблице.
Тогда макрос.

senswet

Цитата: bk от  4 апреля 2020, 12:27
//То есть нужны два независимых источника данных, выбором элементов в которых происходила бы фильтрация в третьей таблице.
Тогда макрос.

С макросами раньше не работал. Буду премного благодарен за пару ссылок с примерами.

economist

#11
Слишком много неясного, а программирование форм в Base "ещё то" приключение, запросто способное унести из жизни пару недель.

Упростите задачу. Пусть на одной из форм будет оба контрола для формирования полного условия отбора. В нормальной автоматизации двух форм должно хватать. Что-то можно заменить списком, комбобоксом итд. Контрол Таблица в форме может быть не один, он м.б. удобен для выбора в нек. случаях.

PS: В 90% виденных подобных случаях, когда не хватает какой-то "пимпочки" для выбора - в базах данных создают вирт. таблицу - Представление, куда сливают через JOIN/подзапросом данные двух таблиц, и оно прекрасно ложится в одну Форму. В некоторых хороших движках (SQLite) - есть автовычисляемые поля таблиц, что решает проблему непрерывного добавления данных и делает ненужными доп. формы.   
   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...