Обновление подчиненной формы
Я добился того что при выборе элемента из списка и нажатии кнопки я получаю новую! форму с правильным результатом. но подчиненная форма остается не обновленной. как добиться ее обновления ?
Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Обновление поля подчиненной формы по обновлению поля другой подчиненной формы
Доброго времени суток. Прошу помощи, запутался. Существует главная форма (допустим frmMain) На.

Обновление подчиненной формы из подчиненной формы
Есть форма Прибора Учета на ней размещены две подформы Показания (то есть две формы одной и той же.

Обновление подчиненной формы
Привет всем. Проблема такая. На форме Поиск по услугам по нажатию кнопки Обновить формируется.
Обновление подчиненной формы
Есть Основная форма Есть подчиненная В основной форме присутствует поле со списком "Фирма", на.
2454 / 797 / 24
Регистрация: 18.08.2009
Сообщений: 1,697
Попробуйте для кнопки, на которую Вы нажимаете, прописать в свойствах по событию «нажать кнопку» следующее в коде VBA
Me.ИмяПодчиненнойФормы.Requery
Вместо «ИмяПодчиненнойФормы» введите имя Вашей подчиненной формы
Регистрация: 20.11.2009
Сообщений: 452
1 2 3
Private Sub Кнопка62_Click() If listbox.Value <> Null Then Me.подчиненная.Requey End Sub
Вот такое написал — не работает
Добавлено через 26 минут
проблема решилась сама собой
1 2 3 4 5 6 7 8 9 10
Private Sub Кнопка62_Click() On Error GoTo Err_Кнопка62_Click Me.подчиненная.Requery Exit_Кнопка62_Click: Exit Sub Err_Кнопка62_Click: MsgBox Err.Description Resume Exit_Кнопка62_Click End Sub
Добавлено через 1 час 41 минуту
еще такой вопрос
если это после со списком зависит от выбора в другом.
выбор идеи из такого запроса
1 2 3
SELECT отдел_кадров.Кодсотрудника, отдел_кадров.фио FROM отдел_кадров WHERE отдел_кадров.проффесия=Forms!Форма1!listbox2.Value;
в VBA я написал
listbox.Value = Null Me.listbox2.Requery
Создание форм в LibreOffice Base
Мы уже рассмотрели, как в LibreOffice Base создаётся база данных, формируются запросы и выполняется сортировка. Следующий этап — создание форм.
По сути форма представляет собой удобный и упрощённый интерфейс для ввода и редактирования данных в таблицы базы. Простой пользователь может испытывать сложности в работе со стандартным окном редактирования таблицы, а также иногда возникает необходимость разграничивать доступ к различной информации разным пользователям.
Создавать формы в LibreOffice Base можно так же как и предыдущие типы объектов: с помощью дизайнера или мастера форм. Мы испробуем оба варианта.
Для примера возьмём созданную ранее базу данных клиентов.
Здесь я вынуждена оговориться и признать, что при создании данного примера мы напоролись на Бритву Оккама: данные из таблицы Дисконтные карты должна была быть сразу включена в таблицу Клиенты. Верность этой ошибки подтверждает тот факт, что при создании связи мы получили тип «1-1», считающийся у проектировщиков не желательным. Поэтому я исправлю свою ошибку: создам новую сводную таблицу и перенесу в неё все имеющиеся данные:


Так как у СУБД этого типа нет специальных инструментов для объединения таблиц и данных в них, выносим закономерный урок, что исправлять ошибки проектирования в уже используемой базе данных довольно накладно.
А для наглядности создания форм с субформами (подчинёнными формами со связью «1-много») создадим таблицу Покупки, содержащую информацию о времени, дате, наименовании и сумме покупок клиентов:
Свяжем таблицы между собой по полю НомерДисконтнойКарты.
Итак, вернёмся к формам. Для таблиц Клиенты2 и Покупки мы сделаем две формы: одну для менеджера, который вносит данные по новым картам и связывается с клиентами и, соответственно, должен иметь возможность видеть и редактировать всю информацию, и другую — для кассира, который может только просмотреть данные клиента о бонусах и вносить информацию о покупках.
Откроем Мастер, выбрав пункт Использовать мастер для создания формы… в окне Задачи :

Из выпадающего списка Таблицы или запросы выберем таблицу Клиенты и переместим все поля из списка Существующие поля в список Поля в форме :

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

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


Теперь нам нужно выбрать расположение элементов на форме: для данных клиента целесообразнее выбрать столбцы или блоки — как правило, во время работы с подобными данными одномоментно нужна только одна запись, а не целый гурт. Я выбрала вариант Столбцы — подписи сверху . А вот для покупок возьмём таблицу (или Лист данных , как она названа в Мастере) — клиент и его покупки будут автоматически сопоставлены при выполнении формы и при выборе других вариантов отображения мы сможем увидеть только первую покупку клиента:
Нам шестом шаге выбирается источник данных, а по сути определяются права доступа. Мы предполагаем, что менеджеру доступны все действия, поэтому оставим настройки по умолчанию:


На следующем этапе можно изменить стиль элементов формы. Сейчас мы не будем этого делать и оставим всё, как есть:
Ну и восьмой, последний шаг — название формы и определение действий с ней. Так как мы ориентируемся на пользователя, назовём форму «Клиенты (для менеджера)»:

После нажатия кнопки Готово , форма откроется на выполнение:

![]()
Внизу, под ней, есть удобная панель Навигация формы :
С её помощью можно:
— найти нужную запись;
— последовательно просмотреть всю имеющуюся информацию;
— добавить/удалить/отредактировать и сохранить запись;
— сортировать и фильтровать данные;
— отобразить записи в виде таблицы из базы.
Согласитесь, основной функционал, необходимый пользователю, присутствует.
Теперь попробуем немного изменить внешний вид формы: закроем форму (естественно, с сохранением, если вы успели внести изменения) и отроем её на редактирование — на вкладке Формы основного окна Base вызовем контекстное меню для нашей формы и выберем Изменить . Откроется дизайнер (или редактор, как изволите), в котором мы можем изменить размер и расположение имеющихся элементов, добавить новые, запрограммировать их на выполнения конкретных действий и сделать многое другое. Вообще, по функционалу он напоминает IDE, пусть и сильно упрощённую. Поэтому рассказать обо всех её возможностях, да ещё и с примерами — дело целого курса, а не одной статьи. Но кое-что мы попробуем
Для начала немного изменим размеры полей и таблицы: одинарное нажатие на элементе высвечивает зелёные ключевые точки, потянув за которые можно изменить размер:


Немного опустим столбцы с данными о клиентах: для этого выделим все поля ввода с зажатым Shift’ом и сдвинем их вниз:
Добавим подписи к логически блокам о клиентах и покупках: для этого нам потребуется элемент Метка с панели Элементы управления слева. Нажмем на него и расположим над столбцами с информацией о клиентах:

Изменим её название и размер шрифта: двойной клик на метку откроет окно свойств, в котором мы изменим значение полей Текст (именно его, а не свойство Имя , которое обычно используется для программных обращений к элементу) и Шрифт (до 12 пт):

Теперь скопируем метку (команды Копировать/Вставить контекстного меню метки, либо комбинации клавиш Ctrl+C/Ctrl+V ) и озаглавим таблицу покупок, аналогично изменив текст метки. Получилось так:

Кстати, изменить названия созданных через Мастер полей и столбцов таблицы нельзя.
Ну и на закуску изменим фон формы: для этого откроем Галерею кнопкой и откроем в левом столбце папку Фоны . Выберем в окне справа наиболее приемлемый вариант и применим его через пункт контекстного меню Вставить фоном->Страница :

Также в галерее можно найти различный картинки, звуки и иконки для вставки на форму. Для примера я вставила картинку из папки Финансы
Закрываем галерею повторным нажатием на кнопку , сохраняем форму, закрываем редактор и запускаем на выполнение. В итоге форма выглядит так:

Для того, чтобы просто изменить цвет фона или вставить на его место своё изображение, воспользуйтесь пунктом основного меню Формат->Страница. , вкладкой Фон .
Теперь попробуем создать форму в режиме дизайна: откроем редактор форм через пункт Создать форму в режиме дизайна… в окне Задачи . Зададим для формы таблицу, с которой она будет работать, — на панели элементов управления найдём кнопку Свойства формы и в открывшемся окне на вкладке Данные выберем нашу базу данных и таблицу клиентов:

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

Теперь вставим на форму таблицу для вывода информации о покупках. Сначала для этого нужно изменить свойства формы так, чтобы мы смогли получать данные из подчинённой таблицы. Для этого зайдём на вкладку Данные свойств формы и изменим Тип содержимого на Команда SQL — иначе у нас не получится работать сразу с двумя таблицами на форме, не прибегая к запросам (хотя по сути это как раз он и будет и ещё не известно, что удобнее — сформировать запрос привычным способом или так ). Нажмем на кнопку . для пункта Содержимое и у нас откроется редактор запросов. Добавим в него таблицы Клиенты2 и Покупки и сформируем для них простой запрос — получим все поля обеих таблиц так, чтобы они были связаны по номеру дисконтной карты:

Этот же запрос на языке SQL будет выглядеть так: SELECT «Клиенты2».*, «Покупки».* FROM «Покупки», «Клиенты2» WHERE «Покупки».»НомерДисконтнойКарты» = «Клиенты2″.»НомерДисконтнойКарты» .
Добавим таблицу для вывода данных по покупкам: выберем элемент Таблица на панели Дополнительные элементы управления (она открывается на панели Элементы управления слева). При этом откроется Мастер, в котором нам будет предложено выбрать поля для вывода:

Сохраним форму под именем «Клиенты (для кассира)» и откроем её на выполнение:

Конечно, на эту форму также можно добавить дополнительные метки, графические элементы и прочие плюшки, но выполнение этих приёмов мы рассмотрели выше и повторно останавливаться на них не будем.
Ну и закончим на сегодня. На этом уроке мы постарались рассмотреть основные приёмы, необходимые для создания форм и отчётов в базах данных LibreOffice Base. Однако, если у вас остались вопросы по данной теме, вы можете задать их в комментариях или на нашем форуме. Мы постараемся оперативно на них ответить
11 comments
Михаил — 4 апреля 2015 Reply Очень полезная статья!
Но не понял как можно изменять значения связанных таблиц, например изменение текста в одном поле изменяет соответствующий ему айди в другой таблице?
Да и вообще как назначить запросы на некоторые действия, можно назначать только макросы (((( ?
Катерина — 6 апреля 2015 Reply Спасибо, Михаил!
Вы создаёте таблицы и связи между ними. Если в процессе работы изменяете информацию в родительской таблице, то и в дочерней она сменится. Но есть момент. Если вы создаёте ID, значения которых база генерирует сама, менять их потом будет очень проблемно. Да и сложно придумать реальную потребность в этом, если честно. А остальные поля в связанных таблицах не дублируются при правильном их проектировании. Они только могут «встречаться» в запросах.
Про создание запросов у нас была отдельная статья. Их содержимое потом можно выводить на форму аналогично таблицам. Или вы что-то другое имеете ввиду?
Денис — 3 июня 2015 Reply Можно ли сделать форму с кнопками? Чтобы каждая кнопка вызывала свою форму. Можно ли сделать авторизацию? Имя пользователя, пароль. Чтобы было видно кто какую информацию внес.
Катерина — 3 июня 2015 Reply Денис, конечно можно сделать на форме кнопки. Этот элемент есть на панели слева. По нажатию на него можно назначить событие. Открытие новой формы в вашем случае.
Чтобы сделать авторизацию, вам для начала нужно создать в базе таблицу с пользователями, куда вы занесете их логин и пароль. Для авторизации вам нужно будет сравнивать введённые данные с теми, что занесены в базу. И если они совпадут, то позволять пользователю работать (открывать форму, например). Чтобы было видно, кто что вносит, потребуется создать в таблицах, с которыми работают пользователи, поле с их ID. Или можно писать в таблицу или файл пользователь с каким номером с какими номерами записей работал.
Keysee — 11 августа 2015 Reply Как в Base реализовать закрытую базу по типу файла .accdr в Access? То есть, чтоб автоматически открывалась главная форма и у пользователя не было возможности редактировать структуру таблиц, запросов и форм, а только работать с самой базой, вносить данные и т.д.
oermolaev — 17 августа 2015 Reply Keysee, можно сохранить нужную форму в формате *.odt, которая будет открываться в Libreoffice Writer. Далее, в Главном меню Libreoffice Writer -> Вид включить панель Конструктор форм. На нижней панели включить Режим разработки. В Свойствах формы выбрать Источник данных, Тип содержимого, Содержимое. Выключить Режим разработки.
Денис — 13 сентября 2015 Reply У меня галочка «субформа основанная на существующей связи» неактивна. Я не могу ее выбрать. Что не так?
Катерина — 14 сентября 2015 Reply Денис, скорее всего вы хотите назначить субформу для той таблицы, которая в связи с какой-то другой является подчинённой. Это противоречит логике создания формы Вы можете либо сделать для такой таблицы форму без субформы, либо создать форму для родительской таблицы, взяв из неё минимум полей, а нужную таблицу сделать как раз субформой.
— 21 ноября 2015 Reply Добрый день! подскажите, пожалуйста- модно ли в форме вставлять формулы? меня интересует такой вопрос- есть поле 1 с датой. в поле 2 мне нужно получить дату, равную дате из поля 1 + 210 дней, например. как это можно реализовать в base? спасибо!
— 17 августа 2016 Reply Большое вам спасибо за очень подробные и понятные уроки.
Евгений — 13 ноября 2016 Reply Ау. Народ.
Кто знает как решить следующий вопрос:
Есть каталог(папка) с рисунками. Как сделать так, чтобы в форме ввводить набор символов и Base в форме выдавал все рисунки в названии которых есть такие символы? И ссылки на них и желательно делал миниатюры.
Уроки 34 — 37
Многотабличные базы данных
(§21. Работа с многотабличной базой данных)
Построим форму, показанную на рис. 3.43, в которой для каждого номера заказа выдаётся его дата, состав заказанных блюд с ценами и общая сумма.

Рис. 3.43
Форма создается на основе таблицы или запроса. В данном случае мы хотим получить информацию о заказе, поэтому основной источник данных — это таблица — Заказы.
Информацию о названиях блюд и ценах можно было бы взять из таблицы Блюда, но она напрямую не связана с таблицей Заказы, поэтому так сделать не получится. Однако у нас есть запрос ЗапросЗаказы, где эти данные объединены, поэтому состав заказа и цены на отдельные блюда мы возьмём из этого запроса.
Как получить общую сумму? Вспомним про ЗапросКОплате, где сумма для каждого заказа уже найдена. Таким образом, форма объединяет информацию из таблицы Заказы и двух запросов. Связь между ними устанавливается по номеру заказа — это поле есть везде.
Как мы уже упоминали, основной источник данных — это таблица Заказы. Щёлкнем на её имени правой кнопкой мыши и выберем пункт Мастер форм из контекстного меню. Включим в форму все поля.
На втором шаге мастер предлагает добавить субформу (подчинённую форму) — дополнительный источник данных, связанный с главной формой. Отметим флажок Добавить субформу (рис. 3.44).

Рис. 3.44
Мастер определил, что для таблицы Заказы подчинённой является таблица Заказано (они связаны отношением 1 :N) и предлагает выбрать эту таблицу. Однако нам нужно использовать запрос, поэтому отметим второй вариант: Субформа, основанная на выбранных полях. Далее выберем поля Заказ, Блюда и Цена из запроса (рис. 3.45).

Рис. 3.45
Несмотря на то что поле Заказ не будет выводиться на экран, его нужно включить в субформу, потому что через это поле на следующем шаге работы мастера устанавливается её связь с главной таблицей (рис. 3.46).

Рис. 3.46
Затем выберем расположение элементов главной и подчинённой форм (рис. 3.47).

Рис. 3.47
После завершения работы мастера нужно отрегулировать размеры полей и настроить формат вывода. Например, для правильного отображения цены нужно войти в конструктор форм, щёлкнуть правой кнопкой мыши на столбце Цена и выбрать пункт Заменить на — Поле валюты. Количество десятичных знаков можно изменить с помощью свойства Точность в окне свойств столбца (пункт Столбец в контекстном меню). Столбец Заказ в подчинённой форме нужно просто удалить (пункт Удалить столбец в контекстном меню).
Осталось вывести общую стоимость заказа. Напомним, что её нужно взять из другого источника данных — запроса Запрос- КОплате. Это значит, что необходимо добавить к форме ещё одну субформу. Мастер тут не поможет, придётся выполнить эту операцию вручную.
Откроем форму в режиме дизайна (Конструктора) и запустим Навигатор форм, щелкнув на кнопке на нижнеи панели инструментов (рис. 3.48).

Рис. 3.48
Здесь MainForm — это главная форма, a SubForm — подчинённая (её содержимое можно раскрыть, щёлкнув на знаке « + »). Остальные ветви дерева — это метки и поля данных.
Щёлкнем правой кнопкой мыши на имени главной формы и выберем в контекстном меню пункт Создать — Форма. В Навигаторе форм появится новая форма с именем Форма, но на экране ничего не меняется, ведь мы пока не добавили в эту форму ни одного элемента.
Выделите название новой формы и создайте метку (надпись) с текстом «К оплате». Для этого надо щёлкнуть на кнопке на панели Элементы управления (обычно она расположена слева) и выделить область по размеру метки (под таблицей). Свойства метки настраиваются с помощью кнопки на нижней панели инструментов или пункта Элемент управления из контекстного меню. Обратите внимание, что в окне Навигатора форм эта метка принадлежит новой субформе. Теперь аналогично добавьте на форму поле валюты, в котором будет выводиться сумма оплаты для выбранного заказа. Кнопка для вставки такого поля находится на панели дополнительных элементов управления.
Перед, вставкой нового поля в окне выделить сторую субформу, которой это поле должно принадлежать.
Осталось связать новую субформу с источником данных.. Для этого выделим субформу в окне Навигатора форм и выберем: Свойства в контекстном: меню. На вкладке Данные установим тип содержимого — запрос, в следующей строчке выберем Запрос — КОплате (рис. 3.49).

Рис. 3.49
Теперь в окне свойств добавленного поля валюты на вкладке Данные надо выбрать поле даннык КОгглапъе. После этого форма полностью работоспособна.

Следующая страница Отчёты

Cкачать материалы урока
Добавление подчиненной формы в главную форму
Подчиненная форма является элементом управления и, как и все остальные элементы, может быть добавлена в главную форму с помощью Мастера подчиненных форм. При этом ее можно создать заранее, и тогда мастеру нужно будет только указать имя добавляемой формы. Если подчиненная форма еще не создана, мастер поможет ее создать.
В качестве примера добавим в форму «Поставщики» (Suppliers) подчиненную форму, которая будет содержать список товаров текущего-поставщика (в исходной версии базы данных «Борей» товары поставщика отображаются в отдельной связанной форме при нажатии кнопки Просмотр товаров (Review Products)):
- Откройте форму «Поставщики» в режиме Конструктора и отобразите на экране панель элементов, если ее не видно.
- При нажатой кнопке Мастера (Control Wizards) перетащите с панели элементов в область данных формы элемент управления Подчиненная форма/отчет (Subform/ Subreport), поместив ее под всеми остальными элементами. Перед этим можно увеличить высоту области данных, но это необязательно, т. к. она увеличится автоматически после вставки нового элемента.
- В первом диалоговом окне мастера выберите переключатель Имеющиеся таблицы и запросы (Use existing Tables and Queries) и нажмите кнопку Далее (Next).
- Во втором диалоговом окне Мастера подчиненных форм в раскрывающемся списке Таблицы и запросы (Tables/Queries) выберите таблицу «Товары» (Products). В списке Доступные поля (Available Fields) выберите поля для включения в форму (рис. 9.35) и нажмите кнопку Далее (Next).
- В третьем диалоговом окне нужно определить поля, по которым связываются главная и подчиненная формы (рис. 9.36). Можно выбрать их из списка или задать самостоятельно. Так как таблицы «Поставщики» (Suppliers) и «Товары» (Products) связаны, в списке отображается нужная связь. Выберите ее и нажмите кнопку Далее (Next).
- В последнем диалоговом окне нужно задать имя подчиненной формы. По умолчанию предлагается имя «подчиненная форма Товары» (Products subform). Можно оставить-это имя и нажать кнопку Готово.
Рис. 9.35. Второе диалоговое окно Мастера подчиненных форм
Рис. 9.36. Третье диалоговое окно Мастера подчиненных форм
Результат работы мастера представлен на рис. 9.37.
Мастер подчиненных форм удобен тогда, когда подчиненная форма еще не создана. Если подчиненная форма уже существует, можно просто разместить рядом окно базы данных с раскрытой страницей Формы (Forms) и главную форму, открытую в режиме Конструктора и просто перетащить мышью нужную форму из окна базы данных в главную форму. При этом главная становится подчиненной формой и автоматически устанавливается связь между формами.
Рис. 9.37. Подчиненная форма «Товары» внутри формы «Поставщики»