![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
Laky |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
На главной форме [GL] существует подчиненная [F1]
Подчиненная форма выводит все данные из таблицы [T1] (имя, пол, возраст, место работы\учебы) Для удобства в подчиненной все поля, кроме имени, скрыты На главной соответственно сделаны 3 поля, которые выводят данные при выборе имени, то есть, например, поле возраст главной формы имеет источник записи как [Forms]![GL]![F1].[Form]![vozrast] Вопрос: 1) например, поле пол в таблице булево, как сделать так, чтобы на главной форме специальный лейбл менял название мужской\женский в зависимости от значения поля в таблице 2) на первый вопрос и кучу таких же примитивных вопросов легко ответить, если знать, как перехватить тот момент, когда поле главной с прописанным источником данных, меняет свое значение. Есть ли такое событие? Прежде чем ответить, попробуйте сделать, ибо кажется, что должно сработать, вот прям точно, а не работает. Если перехватить событие изменения контрола главной не имеется возможности, тогда покажите, как это сделать с помощью событий подчиненной. Пример базы http://slil.ru/27381195 Заранее спасибо |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Базу качать не буду - сейчас некогда, но скажу кое-что.
Не насилуйте объектную модель - каждый объект должен отвечать только за себя, никто в его свойства/методы/события своими грязными руками влезать не должен. Если событие или изменение происходит в подчинённой форме - именно она должна обработать событие/изменение. Если необходимо оповестить о нём главную форму - пусть она вызовет соотв. метод или публичную процедуру/функцию главной формы или создаст соотв. событие для главной формы. И наоборот. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
bopoha |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
А вообще использовать в качестве источника данных подчиненную форму это плохое решение. Лучше данные брать непосредственно из таблицы (с редактированием проблем не будет). А показывать данные только выбранной фамилии при помощи фильтра. При этом также стоит с главной формы вынести в подчиненную блок с данными о фамилии.
Если же очень хочется остатся на источнике данных в качестве формы, то стоит писать свою процедуру загрузки данных на главную форму при изменении позиции в подчиенной и тогда котролы станут редактируемыми (Увы, контролы с выражениями не редактируются) и можно будет обрабатывать события об изменениях. Но это гемор. Как это потом сопровождать? Вот общая информация о событиях: http://5codelines.net/events1/ Обрабатываеть события можно только объектов (формы, пользовательские классы). Увы от таблиц не получится. Поэтому можно обработать события поля формы. Чтобы событие от элемента управления просиходило, необходимо контролу об этом сказать:
Далее объявить ссылку на улемент управления:
И инициализировать ссылку, например при открытии формы
А теперь объясните, зачем такие сложности? Мне очень любопытно. |
||||||
|
|||||||
Laky |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
Я не понимаю, что вызывает у вас такое удивление, если честно)
Говорите, лучше данные брать непосредственно из таблицы? я беру их не из таблицы, а через подчиненную, не потому, что боюсь каких-то проблем с редактированием (к слову, редактировать мне ничего не нужно) а потому, что так нагляднее объясняю: вы когда нибудь видели на одной главной форме две, связанные между собой подчиненные формы? ну, первая подчиненная - список организаций, вторая - подробности каждой? У меня получается практически так же с отличием в том, что вторую подчиненную я не делаю, перенеся ее функционал на главную. Подчиненная форма вывела все имена. Выбрали какое-то имя, кликнули, рядом в полях - все подробности. Это удобно? Да. А какую альтернативу вы можете предложить? Напишите. Может, ваше предложение действительно интереснее. Вопрос состоял как раз в том, о чем сказал(а) Akina: "Если событие или изменение происходит в подчинённой форме - именно она должна обработать событие/изменение. Если необходимо оповестить о нём главную форму - пусть она вызовет соотв. метод или публичную процедуру/функцию главной формы или создаст соотв. событие для главной формы. И наоборот. " какое событие происходит? то есть к какой-то записи в подчиненной форме пришел фокус но подчиненная форма имеет ленточную структуру запись подчиненной формы получает 1 раз, при загрузке значит, дело не в этом изменилась текущая запись? ну да, нужно отследить, что пользователь в подчиненной форме тыкнул на вторую\пятую\десятую запись вот тут, каким событием отслеживается изменение текущей записи в подчиненной форме, у меня и возник вопрос еще мне подумалось, что можно пойти другим путем и не ловить то, что происходит в подчиненной а поймать тогда, когда полю главной будет присвоено новое значение и опять же не известно мне, каким событием это можно отследить Что касается высказывания про "влезание своими грязными руками", то хотелось бы уточнить, действительно ли вы считаете присвоение полю какого-то значения через конструктор, а не исключительно программным способом, "влезанием", и всегда ли вы считаете, что у программистов "грязные руки"? Не просто так приложена была база, она абсолютно не нагруженна лишними деталями зато тут же ставит все на свои места и становится понятнее, что собственно нужно, где и как. Уж кому, как не вам знать, что объяснение словами бывает запутаннее, чем суть на самом деле. Заранее спасибо! |
|||
|
||||
bopoha |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Я даже так делаю.
Я изложил выше. Взаимодействие 3-х форм. 1-а главная, 2-е подчиненные.
Событие так и называется Текущая запись или Current.
Ни слова, ни база не показали мне то, что хотите вы получить. Чтобы не быть голословным и показать насколько вы усложняете, я выложу пример чуть позже. |
||||||||
|
|||||||||
bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Вот пример, как обещал.
Обратите внимание, что подчиненные формы ничего не знают о друг друге и главной форме. Только главная форма разруливает события! Добавлено через 1 минуту и 22 секунды При этом подчиненные формы можно использовать повторно не зависимо друг от друга. Это сообщение отредактировал(а) bopoha - 8.4.2009, 16:29 Присоединённый файл ( Кол-во скачиваний: 36 ) ![]() |
|||
|
||||
Laky |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
все замечательно
за исключением 2 моментов: 1) вы прекрасно показали, как можно организовать фильтр через главную и формы подчиненные друг о друге ничего не знают это конечно здорово только фильтр мне совершенно ни к чему у меня по сути просто выводится вся таблица, без всяких заморочек да и хвататет у меня сложных мест, чтобы еще вот с простым выводом изощряться поэтому ваш пример мне не полезен в поиске ответа на мой вопрос (потому что вопрос в другом заключался) 2) мне на будущее: баг у вас в программе, вот от него как прикажете избавляться? теперь, возвращаясь к моим баранам, попрошу вас на своем (то есть на вашем) примере поразмыслить: пусть, как только вы выбрали Фирму 1, Label0 на второй подчиненной форме поменяет цвет шрифта, если же другую - вернется к черному (или любой другое свойство свое поменяет) как только получится - тогда будет мне счастье, ибо вы найдете ответ на мой вопрос |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Laky |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
Akina, это не общее решение
а если у вас 11000 записей? а поменять цвет текста лейбла вам надо только тогда, когда название будет заканчиваться на "а" например? в чем у меня состоял вопрос: If pol.value = True Then Label.caption = "мужской" Else Label.caption = "женский" эту строчку надо было прописать в правильном событии и была нужда в вашей помощи в поиске этого события, а если его не существует, то в написании оном только в такие моменты понимаешь всю серьезность и сложность труда специалистов, ориентированных на написание ТЗ... |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Так Вам ещё и разжевать, как по индексу записи получить её содержимое? Неужели нельзя самостоятельно сделать такую простую вещь? А суть везде одна и та же - сообщить главной форме о событии в подчинённой, чтобы она выполнила необходимые действия в другой подчинённой. А будет там IF или CASE, одно простое условие или десяток навороченных - какая разница? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
bopoha |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Laky, нет слов одни эмоции. Научитесь четко и ясно выражать свои мысли, а именно задавать вопросы. Только сейчас дошло, что вам нужно.
А теперь к делу. Дело не в событии. Access еще и выражения поддерживает. Например, Iif, который можно использовать в источнике данных. Получается для поля в источнике данных можно написать так: = Iif([pol];"мужской";"женский"). Только это плохое решение. Практика показала, что лучше использовать справочник. Что будет, если пол не определен? И будет вам счастье.
Учитесь программировать или, например, заплатите мне денег и я вам напишу ![]()
Ой, вот только не нужно перетаскивать одеяло на себя. А то холивар получится.
Какой? |
||||||||
|
|||||||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Laky |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
Akina, bopoha
спасибо большое за помощь спасибо за подсказку получилось все получилось и даже изменение лейбла главной по значению подчиненной, когда запись выбирается во второй подчиненной) можно не пытаться понять) Это сообщение отредактировал(а) Laky - 9.4.2009, 15:34 |
|||
|
||||
boeinfo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 28.11.2015 Репутация: нет Всего: нет |
TwoFormsOnMain.zip Спасибо! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "MS Access" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS Access | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |