powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить изменения в подчиненной форме?
27 сообщений из 27, показаны все 2 страниц
Как определить изменения в подчиненной форме?
    #32239485
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как грамотней определить, произошли-ли изменения в подчиненной форме? К примеру, выбрали другую запись?

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

mahoune
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239545
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что, не присоветуете ничего?
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239548
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самым простым выходом будет добавить объектную переменную в основную форму и в собитии Load инициализировать ее, что-то вроде этого
Код: plaintext
1.
2.
3.
4.
Private WithEvents frmChild as Form

Private Sub Form_Load()
    Set frmChild  = Me.Внедренный0.Form
End Sub


где внедренный - подчиненная форма.
А дальше можешь ловить события подчиненной формы. Но, к сожалению, только стандартные события формы. Но можно, если подумать, и написать такое, что можно будет ловить ЛЮБЫЕ(зависит только от твоей фантазии) события. Например, событие нажатия кнопки в подчиненной форме. Если это тебе интересно я могу рассказать как это сделать.
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239551
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну почему же не системно? Проверяется через Parent, а определение смены записи вешается на OnCurrent.

Ещё момент, если форма подчинённая, то основная вроде как должна быть открыта по умолчанию, ведь подчинённая ей принадлежит (подчиняется) или я не так что-то понял?

А почему исполняемы код должен в главной находиться, его так же в подчинённую можно загнать...
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239559
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Hummer
А если подчиненная форма используется не только в одной форме а в 5.
И чего мне для в подчиненной SELECT CASE лепить для пяти случаев?
mahoune прав, нужно работать с событиями, а обрабатывать там где это действительно нужно.
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239560
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если у меня подчиненная форма хочет учавствовать в нескольких формах, как быть!

А что, неужели никто не реализовал интерфейс, когда на одной форме несколько списков.

В одном, скажем, перечень валют, а в другом их курсы.
Соответственно выбрав валюту получаешь ее курс во втором списке.
Я конечно понимаю, что можно взять сторонний Grid или использовать ListBox
Но с формами как-то веселей. Можно менять столбцы и прочее. Про то что в ListBox можно менять - наслышан, даже попробовал, но тут вроде как все стандартно?!
mahoune
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239565
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to mahoune
Я же тебе написал как это сделать. Если что-то непонятно спроси, не стесняйся :)
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239568
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В одном, скажем, перечень валют, а в другом их курсы.
Соответственно выбрав валюту получаешь ее курс во втором списке.
Я конечно понимаю, что можно взять сторонний Grid или использовать ListBox
Но с формами как-то веселей. Можно менять столбцы и прочее. Про то что в ListBox можно менять - наслышан, даже попробовал, но тут вроде как все стандартно?!


какие проблемы ?
данная задача элементарно решается и формами без проблем.

в основной создаёшь поле. в нем пишешь =формавалют!ид_валюты с именем связь (к примеру)
и привязывешь форму с курсами через подчиненное/основное поле.

и всё...
стоит выбрать валюту тут же автоматом обновится форма с курсами.

и босе ничего не надо городить...
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239577
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Shkurenko Alexander
Мда, об этом я и не подумал, каюсь.
Хотя сейчас сам посмотрел, в подчинённой форме (используется в 7-и различных формах) у меня сейчас так и написано, через обращение к Parent (как раз Case и используется), но мне такой подход облегчает жизнь - править код при необходимости нужно в одном месте, потому что когда есть 1600 форм очень затруднительно искать, где ещё она используется.
Так если обрабатывать там, где это необходимо, то писать Case и не придётся пишется один If в подчинённой:)

2 mahoune
Дык, делается 2 подчинённых формы. Первая подчинена главной, вторая первой подчинённой - на главную выносятся поля для связи между двумя подчинёнными (одно или несколько - зависит от задачи), в эти поля ставятся ссылки на значения в первой подчинённой и они являются MasterField-ми для второй подчинённой, всё.
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239579
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 вадя
Как полезно нажимать Refresh перед своим ответом:) Опоздал:)
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239590
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Hummer
> но мне такой подход облегчает жизнь - править код при необходимости нужно в одном месте, потому что когда есть 1600 форм очень затруднительно искать, где ещё она используется
Ага представил себе. Ты меняешь (добавляешь, удаляешь, переименовываешь и т.п) контролы которые у тебя завязаны в подчиненной. Чего ты будешь делать? Открывать подчиненную и опять искать в Case? А если у тебя поменялся алгоритм работы подчиненной формы и ты вспоминаешь какие же контролы на форме Parent, а если их много. Бррр. Все-таки лучше в подчиненной форме составить список форм в которых она используется.
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239598
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Shkurenko Alexander
Контролы не переименовываются - ибо нафига:) Это раз - потому что когда систему программируют 20 человек это очень чревато:)
Если контролы добавились и есть необходимость их обрабатывать по событиям каким-либо в подчинённой - то один фиг, код всё равно править, мне пофигу, в какой форме, в главной или в подчинённой.
Ещё такой момент - загрузка подчинёной формы происходит раньше главной, так что ввод переменной в этой ситуации не спасёт, если требуется отлавливать событие в подчинённой при загрузке её.

А если у тебя поменялся алгоритм работы подчиненной формы и ты вспоминаешь какие же контролы на форме Parent

В Аксесе ХП подчинённая форма редактируется в том же окне, что и главная - ничего мне вспоминать не надо.
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239603
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Hummer
>В Аксесе ХП подчинённая форма редактируется в том же окне, что и главная - ничего мне вспоминать не надо.

В том то и дело подчиненная форма одна, а родителей много. Поменял подчиненную форму и вперед искать всех родителей.

К тому же при твоем подходе страдает переносимость форм и кода, т.е у тебя формы слишком сильно завязаны с друг другом. Это не есть хорошо.
У себя же я могу написать определенный список событий которые генерит эта форма. И уже во всех главных формах работать с этой формой как с законченной компонентой (написал положил на сервер в SourceSafe). Вот тут то и есть выигрыш при написании программы несколькими людьми.
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239627
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погодите-погодите.

Как грамотней определить, произошли-ли изменения в подчиненной форме? К примеру, выбрали другую запись?

Какие могут быть изменения? Судя по всему, только Current и AfterUpdate.

А почему бы не добавить в подчиненную форму такой код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Form_Current()
  on error resume next
  me.Parent.MyChildFormChanged()
End Sub

Private Sub Form_AfterUpdate()
  on error resume next
  me.Parent.MyChildFormChanged()
End Sub


Надо отслеживать изменения - напиши в соответствующей главной форме процедуру Public Sub MyChildFormChanged. Или нужно что-то еще?
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239633
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все заработало как сказал вадя .

Есть ли смысл настраивать подчиненные/основные поля уже только после открытия основной формы? Или они для в DesignMode и так записываются в свойства объектов основной формы?
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239636
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, пришел Geo и все испортил :). С On Error Resume Next ты это неплохо придумал даже пока и возразить нечем, но mahoune просил чтобы было системно, а винды так не работают ;).
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239637
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Geo, Form_Current не проверял, но After_Updatre точно не срабатывает по переходу на другую запись, но этим-то и занимается Current, как я полагаю!

Но в целом идея очень занимательная...

On Error Goto Next не поменяет значения в других процедурах On Error Goto Label:???
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239640
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Mahoune
Изменения, как я имел в виду, это не только фильтрация/сортировка/переход по записям (Сurrent), а еще и собственно изменения (Before/AfterUpdate:)

Влияет. Т.е. после кода, который может (или должен) вызывать ошибку нужно писать
On Error Resume Next
' код, который может сгенерить ошибку, на которую не нужно обращать внимания
On Error Goto IhaveError
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239642
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой. В других - не поменяет. После End Sub текущей процедуры On Error становиться Goto 0.
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239645
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Шкуренко Александр
А слона-то я и не приметил :))
Ну нравиться мне On Error :))
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239661
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Geo
Подожди! Поймаю я тебя еще на On Error :))
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239752
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Geo & all

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
' событие подчиненной формы'
Private Sub Form_Current()
  on error resume next
  me.Parent.MyChildFormChanged()
End Sub

' Процедура в главной форме'
Public Sub MyChildFormChanged()
  Debug.Print  1  /  0  ' возврат в процедуру Form_Current(), код написанный ниже НЕ ВЫПОЛНЯЕТСЯ!

  ' дальнейшие действия
End Sub


При работе с объектом Err нужно быть крайне осторожным. В частности в приведенном примере необходимо добавить обработку событий в процедуру MyChildFormChanged(). Например On Error Goto 0.
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239793
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Shkurenko Alexander
В том то и дело подчиненная форма одна, а родителей много. Поменял подчиненную форму и вперед искать всех родителей.

Зачем???? Написал же - я изменяю Parent - и в ней же вижу подчинённую - там Case - по имени родителя (этого же) - правлю я его абсолютно так же, как правил бы и в родителе, а на все остальные родительские, где она используется мне пофиг - так как там ничего не поменялось:)
Такой момент ещё - у нас всё меняется по утверждённому ТЗ, а не по тому, как пришла тётя Клава и что-то сказала.
Переносимость не страдает, уж поверьте, перенести могу одну главную и одну подчинённую и всё будет работать, так же как и в вашем случае.

P.S. Ещё раз повторяю, весь код держится в подчинённой форме, потому что она грузится раньше и есть события при её загрузке, которые влияют на контролы в основной, при этом можно не писать процедуру в основной. А при подходе Geo - пишется и там и там - зачем так делать? Про системный подход согласен, но Access изначально совсем не так работает как винды:)
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32239862
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В итоге сделал как подсказал Geo, т.к. необходимо еще учитывать дополнительные параметры поиска.
mahoune
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32240301
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Hummer
Зачем???? Написал же - я изменяю Parent - и в ней же вижу подчинённую - там Case - по имени родителя (этого же) - правлю я его абсолютно так же, как правил бы и в родителе, а на все остальные родительские, где она используется мне пофиг - так как там ничего не поменялось:)

Как зачем case для семи форм, а если еще и нехилая логика то и растут вот потом процедуры на 20 листов. Чего же в этом хорошего. Хорошо если с этой подчиненной формой работаешь только ты, а если несколько человек, то тут всплывает вероятность ошибки. Поди потом разбери кто-чего нарисовал. При том же растет и размер формы. Зачем мне объект в оперативной памяти в котором я использую 1/7 часть кода?

Переносимость не страдает, уж поверьте, перенести могу одну главную и одну подчинённую и всё будет работать, так же как и в вашем случае

Ага удаляешь весь case и пишешь все по новой какая тут переносимость?

Ещё раз повторяю, весь код держится в подчинённой форме, потому что она грузится раньше

Какая, в данном случае, разница когда она грузиться? Мне непонятно.

А при подходе Geo - пишется и там и там - зачем так делать?[/src]
Затем, что мне, как программисту, гораздо проще работать с событийной моделью, а не валить все в одну кучу.
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32240369
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Shkurenko Alexander
Нехилая логика выносится на сервер - очень жаль, если она у вас в аксесе.

Если я переношу одну форму главную и эту подчинённую зачем мне весь Case удалять и заново его писать?:) В этом Case эта главная уже есть:)

Грузится раньше основной - я контролы в основной скрываю из подчинённой. Мне так удобнее, тоже как программисту.

С размерами согласен, но кода там не так много, гораздо меньше, чем на одну страничку:) Мне так нужно только для скрытия контролов, ещё для присвоения других источников данных - всё.

А такой вопрос - что висит по обработке события в подчинённой в вашем приложении? Просто интересно - нехилая логика начинается по изменению в подчинённой?
В формах в нашем случае содержится код для управления контролов - всё остальное - вызов функций в модулях. Всё остальное на сервере.....

А так - по теме уже ответили (при чём требовалась совсем примитивная штука, не имеющая отношения к нашему обсуждению), не будем дальше разглагольствовать:)
...
Рейтинг: 0 / 0
Как определить изменения в подчиненной форме?
    #32240458
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Нехилая логика выносится на сервер - очень жаль, если она у вас в аксесе.
Нет возможности на клиенте поставить MS SQL Server.

>Просто интересно - нехилая логика начинается по изменению в подчинённой?
Да. На ней завязана почти вся работа главных форм. Я же писал, что подчиненная генерит определенные события(напрмер сокрытие/отображение столбцов). А главная отрабатывает эти события.

не будем дальше разглагольствовать:) Обеими руками за :))
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить изменения в подчиненной форме?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]