Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

12 Май 2021, 18:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Форма, зависимая от двух элементов управления  (Прочитано 2972 раз)
0 Пользователей и 1 Гость смотрят эту тему.
senswet
Участник
**
Offline Offline

Сообщений: 6


« Стартовое сообщение: 29 Март 2020, 18:34 »

Можно ли сделать форму, зависимую от двух элементов управления, принадлежащих родительской форме?
Например: в главной форме две таблицы, выбором элементов в которых происходит выборка в таблице дочерней формы.
« Последнее редактирование: 29 Март 2020, 18:35 от senswet » Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 457


« Ответ #1: 29 Март 2020, 19:25 »

Можно, заданием соотв. свойств (SQL запрос). А что не удастся через свойства - можно изменить макросом.    
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
senswet
Участник
**
Offline Offline

Сообщений: 6


« Ответ #2: 29 Март 2020, 19:34 »

Можно, заданием соотв. свойств (SQL запрос). А что не удастся через свойства - можно изменить макросом.   
Какие свойства и где нужно задать? Как через SQL связываются родительская и дочерняя формы?
Записан
bk
Участник
**
Offline Offline

Сообщений: 30


« Ответ #3: 1 Апрель 2020, 10:57 »

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

Дочерняя форма уже связана с родительской. В зависимости от ситуации Ваша задача:
- либо источником данных для дочерней формы сделать SQL-запрос и связать форму с родительской по нужному полю (но в этом случае, как я понимаю задачу, вряд ли возможен выбор по двум таблицам родительской формы)
- либо и скорее всего - на событие "выбор элемента в таблицах главной формы" назначить макрос, который обновляет таблицу в дочерней форме. Т.е. в макросе назначаются переменные (то, что выбрали в главной форме) и эти переменные подставляются в SQL-запрос, который является источником данных для дочерней формы. И все это в макросе. По идее код короткий.
//"выбор элемента в таблицах главной формы" - имеется ввиду та операция, которую и как Вы производите с таблицами главной формы. Нажатие кнопки или ещё что...
« Последнее редактирование: 1 Апрель 2020, 11:01 от bk » Записан
senswet
Участник
**
Offline Offline

Сообщений: 6


« Ответ #4: 1 Апрель 2020, 19:28 »

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

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

Сообщений: 30


« Ответ #5: 2 Апрель 2020, 14:11 »

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

Сообщений: 6


« Ответ #6: 2 Апрель 2020, 18:19 »

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

Субформу можно связать только с одной родительской формой. Вы  предлагаете связать субформу-2 сразу с главной формой и субформой, но этого не получается сделать. В вашем примере субформа-2 будет подчиняться субформе, но не будет зависеть от главной формы.
« Последнее редактирование: 2 Апрель 2020, 18:21 от senswet » Записан
bk
Участник
**
Offline Offline

Сообщений: 30


« Ответ #7: 3 Апрель 2020, 20:20 »

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

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

Сообщений: 6


« Ответ #8: 4 Апрель 2020, 11:09 »

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

Сообщений: 30


« Ответ #9: 4 Апрель 2020, 12:27 »

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

Сообщений: 6


« Ответ #10: 4 Апрель 2020, 20:33 »

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

С макросами раньше не работал. Буду премного благодарен за пару ссылок с примерами.
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 457


« Ответ #11: 5 Апрель 2020, 10:56 »

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

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

PS: В 90% виденных подобных случаях, когда не хватает какой-то "пимпочки" для выбора - в базах данных создают вирт. таблицу - Представление, куда сливают через JOIN/подзапросом данные двух таблиц, и оно прекрасно ложится в одну Форму. В некоторых хороших движках (SQLite) - есть автовычисляемые поля таблиц, что решает проблему непрерывного добавления данных и делает ненужными доп. формы.   
    
« Последнее редактирование: 5 Апрель 2020, 11:05 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!