Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
1

Обновление подчиненной формы из подчиненной формы

02.12.2016, 06:20. Просмотров 1114. Ответов 20
Метки нет (Все метки)

Есть форма Прибора Учета на ней размещены две подформы Показания (то есть две формы одной и той же таблицы, делается для удобного восприятия)
Одна подформа табличная
Вторая подформа Простая форма, на ней две кнопки Удалить и Добавить.
Как сделать после удаления или добавления обновлялась табличная подформа?
Делал:
1. кнопки макросом, в конец Макроса добавлял "Обновление Объекта" Объект "Форма" Форма "Табличная форма Показания"
2. Кнопки кодом, после удаления записи
Visual Basic
1
Forms("SPPokazania").Form.Recalc
3. В событие простой формы на удаление вешал это же событие
не чего не помогает, в табличной подформе так же отображается #Удален или не отображается Добавленный элемент. Когда в ленте нажимаешь Обновить, под форма обновляется

Добавлено через 9 минут
После того как ввел код надо было заменить подформы на основной. После замены все заработало.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2016, 06:20
Ответы с готовыми решениями:

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

Сумма из подчиненной формы, отмена записей в подчиненной форме
Нужна сразу помощь по четырем пунктам, форма КвитанцияСкупкиОбмена надо: 1....

Обновление подчиненной формы
Есть главная форма в ней поле со списком. исходя из выбранного значения в...

Обновление подчиненной формы
Есть Основная форма Есть подчиненная В основной форме присутствует поле со...

Обновление подчиненной формы
Бурундук, спасибо, Вы мне очень помогаете!!! Извините за скромность, но...

20
Панург
Мы один, давай на "ты"
1644 / 720 / 139
Регистрация: 16.06.2016
Сообщений: 1,426
02.12.2016, 06:52 2
Лучший ответ Сообщение было отмечено Бормалей как решение

Решение

Цитата Сообщение от Бормалей Посмотреть сообщение
Как сделать после удаления или добавления обновлялась табличная подформа?
Проще всего второй форме присвоить набор записей (Recordset) первой формы. Всё. Ничего обновлять и дёргать ненужно, всё работает само.

Добавлено через 1 минуту
Upd. Где-то я выкладывал пример такой реализации - имитация разделённой формы...

Добавлено через 16 минут
Бормалей, вот, нашёл - Перерисовка формы и её моргание при поиске по мере ввода
1
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
02.12.2016, 07:29  [ТС] 3

А может подскажите в таком случае, как по полю со списком фильтровать данные? Может тоже не так делаю.
Есть Объект у него несколько приборов учета. На форму приборов учета добавляю Полесописком с источником данных Объекты. Нужно что бы в форме прибора учета отображались те данные которые принадлежат объекту.
Я делаю через Rowsource
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub ПолеСоСписком214_LostFocus()
If IsNull(ПолеСоСписком214) Then
    ПолеСоСписком228.RowSource = "SELECT ObjectDogovora.Код, ObjectDogovora.Nazvanie FROM Dogovor INNER JOIN ObjectDogovora ON Dogovor.Код = ObjectDogovora.Dogovor;"
    Me.RecordSource = "sprPriborUcheta"
Else
    ПолеСоСписком228.RowSource = "SELECT ObjectDogovora.Код, ObjectDogovora.Nazvanie FROM Dogovor INNER JOIN ObjectDogovora ON Dogovor.Код = ObjectDogovora.Dogovor" & _
                                " WHERE Dogovor.код=" & ПолеСоСписком214.Column(0)
    Me.RecordSource = "SELECT sprPriborUcheta.Код, sprPriborUcheta.Tip_Marka, sprPriborUcheta.ZavodNomer, sprPriborUcheta.Izmerparametr, sprPriborUcheta.SrokPoverki, sprPriborUcheta.ObjectUcheta, sprPriborUcheta.datapoverki, sprPriborUcheta.MestoUstanovkiPlomb, sprPriborUcheta.Tip, sprPriborUcheta.NacalPokazanie" & _
                                " FROM Dogovor INNER JOIN (ObjectDogovora INNER JOIN sprPriborUcheta ON ObjectDogovora.Код = sprPriborUcheta.ObjectUcheta) ON Dogovor.Код = ObjectDogovora.Dogovor" & _
                                " WHERE (((Dogovor.Код)=" & ПолеСоСписком214.Column(0) & "));"
End If
End Sub
И что то мне подсказывает что есть более удобное решение
0
Панург
Мы один, давай на "ты"
1644 / 720 / 139
Регистрация: 16.06.2016
Сообщений: 1,426
02.12.2016, 07:37 4
Бормалей, не очень понял, как это должно выглядеть.

Кабы схемку аль чертеж -
Мы б затеяли вертеж,
Ну а так - ищи сколь хочешь,
Черта лысого найдешь!

© Филатов Л., Про Федота стрельца удалого молодца
1
shanemac51
Модератор
Эксперт MS Access
8070 / 3064 / 443
Регистрация: 07.08.2010
Сообщений: 8,331
Записей в блоге: 2
02.12.2016, 07:51 5
Цитата Сообщение от Бормалей Посмотреть сообщение


И что то мне подсказывает что есть более удобное решение
я конечно предпочитаю более читаемое выражение --несколько секунд на редактирование строки с лихвой окупаются
хотя может достаточно и фильтра, чтобы показать записи в форме
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub ПолеСоСписком214_LostFocus()
If IsNull(ПолеСоСписком214) Then
    s1 = "SELECT ObjectDogovora.Код, ObjectDogovora.Nazvanie"
    s1 = s1 & " FROM Dogovor"
    s1 = s1 & " INNER JOIN ObjectDogovora ON Dogovor.Код = ObjectDogovora.Dogovor;"
    ПолеСоСписком228.RowSource = s1
    Me.RecordSource = "sprPriborUcheta"
Else
    s1 = "SELECT ObjectDogovora.Код, ObjectDogovora.Nazvanie"
    s1 = s1 & " FROM Dogovor INNER JOIN ObjectDogovora ON Dogovor.Код = ObjectDogovora.Dogovor"
    s1 = s1 & " WHERE Dogovor.код=" & ПолеСоСписком214.Column(0)
                                
    ПолеСоСписком228.RowSource = s1
     s1 = "SELECT sprPriborUcheta.Код, sprPriborUcheta.Tip_Marka, sprPriborUcheta.ZavodNomer,"
     s1 = s1 & " sprPriborUcheta.Izmerparametr, sprPriborUcheta.SrokPoverki,"
     s1 = s1 & " sprPriborUcheta.ObjectUcheta, sprPriborUcheta.datapoverki,"
     s1 = s1 & " sprPriborUcheta.MestoUstanovkiPlomb, sprPriborUcheta.Tip, sprPriborUcheta.NacalPokazanie"
     s1 = s1 & " FROM Dogovor"
     s1 = s1 & " INNER JOIN (ObjectDogovora"
     s1 = s1 & " INNER JOIN sprPriborUcheta"
     s1 = s1 & " ON ObjectDogovora.Код = sprPriborUcheta.ObjectUcheta)"
     s1 = s1 & " ON Dogovor.Код = ObjectDogovora.Dogovor"
     s1 = s1 & " WHERE (((Dogovor.Код)=" & ПолеСоСписком214.Column(0) & "));"
    Me.RecordSource = s1
End If
End Sub
0
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
02.12.2016, 07:54  [ТС] 6
Хорошо. На форме Прибор Учета. База 2007 формата
0
Вложения
Тип файла: zip Database4.zip (36.0 Кб, 5 просмотров)
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
02.12.2016, 07:57  [ТС] 7
Цитата Сообщение от shanemac51 Посмотреть сообщение
хотя может достаточно и фильтра
Дело в том что данные потом можно еще и отфильтровать по году. То есть выбираем прибор учета, показываются все показания этого прибора, отдельным фильтром можно отобрать по году.

То есть мысль правильная просто записана не удобно?
0
shanemac51
Модератор
Эксперт MS Access
8070 / 3064 / 443
Регистрация: 07.08.2010
Сообщений: 8,331
Записей в блоге: 2
02.12.2016, 08:03 8
у вас в таблицах только 1 прибор и 3 объекта
выбирать нечего
0
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
02.12.2016, 08:07  [ТС] 9
Цитата Сообщение от shanemac51 Посмотреть сообщение
у вас в таблицах только 1 прибор и 3 объекта
выбирать нечего
Но это же просто схема для Панурга.
Вот заполнил немножко.
0
Вложения
Тип файла: zip Database4.zip (53.5 Кб, 3 просмотров)
Панург
Мы один, давай на "ты"
1644 / 720 / 139
Регистрация: 16.06.2016
Сообщений: 1,426
02.12.2016, 08:19 10
Цитата Сообщение от Бормалей Посмотреть сообщение
Но это же просто схема для Панурга.
Савсэм схэматичная схема

Ещё одна подчинённая форма не спасёт гиганта мысли? (по Ильфу и Петрову)
И фильтровать ничего ненужно - пусть само фильтруется.
0
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
02.12.2016, 08:28  [ТС] 11
Может гиганта то и спасёт, но я то тут при чем
то есть я все правильно делал =(
0
Панург
Мы один, давай на "ты"
1644 / 720 / 139
Регистрация: 16.06.2016
Сообщений: 1,426
02.12.2016, 08:36 12
Цитата Сообщение от Бормалей Посмотреть сообщение
то есть я все правильно делал =(
Стоп! Может у меня неправильно отображается твоя задумка? Я там вижу 2 формы, их я могу открывать попеременно. В одной форме код у комбо.
Я говорил примерно за такой вид (см пример). Там есть подчинённая форма как табличка вверху, и как дерево разворачивающееся внизу. Не?
1
Вложения
Тип файла: zip ИмитацияРаздФормы.zip (39.6 Кб, 4 просмотров)
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
02.12.2016, 08:59  [ТС] 13
Вот есть Прибор учета его данные Название Марка Тип отображаются на форме frmMain ниже данных находится подформа Показания (простая с текстбоксами) с полями Дата, Показание, кодПрибораучета
Еще ниже табличная подформа Показания с полями Дата, Показания,кодПрибораучета
Эти две подформы связаны с главной по Код-Кодприбораучета
Я сделал как у Вас рекордсеты и переход по записям обновление удаление теперь нормально проходят.
Теперь мне нужно добавить некий фильтр, к примеру Что бы в Приборе учета в подформах отображались данные по этому прибору учета за 2016 год.
Как сделал я:
Связал рекорд сетами, добавил Полесосписком, к нему на событие ПотеряФокуса повесил код:
Visual Basic
1
2
3
4
Me.Form.Filter = "Year(DataPokazania)=" & GodPokazaniya.Column(0)
Me.Form.FilterOn = True
Forms("SPrPriborUcheta")!SpPokazania.Form.Filter = "Year(DataPokazania)=" & GodPokazaniya.Column(0)
Forms("SPrPriborUcheta")!SpPokazania.Form.FilterOn = True
И теперь отображаются все показания за 2016 ПО ВСЕМ приборам учета. Я думал так: Ставлю в подФормы Наборы записей (таблица показаний где кодприбора = коду с главной формы) и уже Filter их фильтрует.
0
shanemac51
Модератор
Эксперт MS Access
8070 / 3064 / 443
Регистрация: 07.08.2010
Сообщений: 8,331
Записей в блоге: 2
02.12.2016, 09:19 14
Я БЫ ВИДИМО СДЕЛАЛА НА ФИЛЬТРАХ
0
Миниатюры
Обновление подчиненной формы из подчиненной формы  
Вложения
Тип файла: zip borm03.zip (61.7 Кб, 4 просмотров)
shanemac51
Модератор
Эксперт MS Access
8070 / 3064 / 443
Регистрация: 07.08.2010
Сообщений: 8,331
Записей в блоге: 2
02.12.2016, 09:21 15
НО НАДО УЧЕСТЬ, ЧТО ИНОГДА НУЖНА
и обратная задача на каком объекте стоит прибор ххххх
0
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
02.12.2016, 09:59  [ТС] 16
shanemac51, я просто не правильно выражаю свои "хочухи". А скинуть рабочий пример не получается, у меня все формы завязаны друг с другом, и это наверное плохо.
Вот на том примере, нужно сверху ленточной формы (лучше все таки табличная подформа) сделать поля для добавления и редактирования, для этого я добавил еще одну подчиненную форму (вид:Простая).
Связал их рекордсеты как посоветовал Панург.
Далее мне нужно добавить фильтр ПриборУчета, что бы отфильтровать на Объекте Приборы учета по какому то признаку.

Пример: в объекте ТЭЦ-2 есть 15 счетчиков
Выбираем Объект ТЭЦ-2, в ленточной форме отображаются все 15 счетчиков этого объекта.
Теперь нам нужно выбрать все счетчики СГВ мы в какое то поле пишем СГВ и у нас отображаются в ленточной форме уже 3 счетчика.
Я сделал через фильтр, в нашем примере он бы выглядел так "название like " & ТекстовоеПоле
Но выбираются все счетики СГВ* для всех объектов.

"Писать ТЗ не так уж и легко"
0
shanemac51
Модератор
Эксперт MS Access
8070 / 3064 / 443
Регистрация: 07.08.2010
Сообщений: 8,331
Записей в блоге: 2
02.12.2016, 10:08 17
Цитата Сообщение от Бормалей Посмотреть сообщение
Но выбираются все счетики СГВ* для всех объектов.
это не проблема --о подобном поиске я вам и намекала(по модели/типу/году выпуска/году последней проверке ....)
мало ли по каким полям нужен поиск-- на форуме примеров тьма
--
хотя табличные формы иногда удобны --я предпочитаю ленточные
--удобный динамический поиск
--наглядность --стараюсь вместить нужные поля в ширину экрана, шапки в несколько ярусов
--при клике на строке --показ документа полностью
1
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
02.12.2016, 15:09  [ТС] 18
Цитата Сообщение от shanemac51 Посмотреть сообщение
-о подобном поиске я вам и намекала(по модели/типу/году выпуска/году последней проверке ....)
Так вот у меня вопрос:
Почему Если я применяю фильтр "Объект Like *СГВ", то не учитывается рекордсурс формы "Select PriborUcheta.Nazvanie FROM PriborUcheta WHERE кодОбъекта=1". Выводятся все приборы учета где есть СГВ а не только для объекта с кодом 1.
0
shanemac51
Модератор
Эксперт MS Access
8070 / 3064 / 443
Регистрация: 07.08.2010
Сообщений: 8,331
Записей в блоге: 2
02.12.2016, 15:34 19
делается выбор по нескольким условиям

SQL
1
2
3
SELECT PriborUcheta.Nazvanie
 FROM PriborUcheta
 WHERE кодОбъекта=1 AND типСчетчика LIKE "сгв*"
1
Бормалей
98 / 49 / 8
Регистрация: 02.07.2013
Сообщений: 267
03.12.2016, 10:12  [ТС] 20
Да я так и делал, поэтому спрашивал варианты попроще.
0
03.12.2016, 10:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2016, 10:12

Обновление подчиненной формы
Добрый день, есть форма на которой размещено 2 подчиненные формы. --В верхнюю...

Обновление подчиненной формы
у меня в форме(главной) поле со списком и подчиненная форма . на основе выбора...

Обновление подчиненной формы
есть форма "главная" на ней подчиненная1, подчиненная2 при помощи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru