Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Bars4
68 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 116
1

Заполнение связанных полей подчиненных, но не смежных форм

18.03.2013, 23:58. Просмотров 1361. Ответов 12
Метки нет (Все метки)

Прошу рассмотреть во вложении пример структуры БД и соответствующую ей форму frmОбъект1 с подчиненной ей frmОбъект2 с подчиненной ей, в свою очередь, frmОбъект3.
При вводе данных в любую из подчиненных форм (frmОбъект2, frmОбъект3), Access автоматом подставляет Id записи родительской формы в связанное поле подчиненной формы смежного уровня.
Вопрос: почему Access не подставляет Id записи самой верхней формы frmОбъект1 в связанное поле формы, находящейся через один уровень (не смежной), т.е: frmОбъкт1.Id -> frmОбъкт3.IdОбъект1 (отмечено стрелками)
Можно ли обойтись без рукоприкладства в VBA ?
0
Миниатюры
Заполнение связанных полей подчиненных, но не смежных форм   Заполнение связанных полей подчиненных, но не смежных форм  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 23:58
Ответы с готовыми решениями:

Сумма полей подчиненных форм
В поле выводится надпись "#Имя?". Все названия верно написаны. В чем может быть...

Автоматическое заполнение полей форм
вобщем такая небольшая проблема ни как не получается ее решить сижу уже 3 дня с...

Серия подчиненных форм
Доброго времени суток. Суть вопроса - есть автоматически сгенерированная...

Несколько подчиненных форм
Здравствуйте! Я совсем чайник, впервые делаю базу с несколькими подчиненными...

Списки подчиненных форм
Доброго времени суток Нужна помощь по полям со списками в подчиненных формах...

12
ltv_1953
Эксперт MS Access
12848 / 5826 / 1117
Регистрация: 21.06.2012
Сообщений: 10,492
19.03.2013, 01:31 2
Формы frmОбъект2 (основная) и frmОбъект3(подчиненная) должны быть связаны по паре полей: в основной (IdОбъект1;Id), в подчиненной (IdОбъект1;IdОбъект2).
2
Bars4
68 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 116
19.03.2013, 11:34  [ТС] 3
Завелось. Работает как часы. Спасибо.
0
ltv_1953
Эксперт MS Access
12848 / 5826 / 1117
Регистрация: 21.06.2012
Сообщений: 10,492
19.03.2013, 11:58 4
Вы бы попробовали немного по другому организовать данные. Не могу, не зная задачи и всей структуры данных, сказать, что эта структура неправильна, но такие связи несколько необычны. В схему данных их включить нельзя без построения нового уникального ("искусственного", так как он будет содержать в себе ключевое поле) индекса, а в связь основной и подчиненной форм приходится включать.
1
Bars4
68 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 116
19.03.2013, 12:25  [ТС] 5
Ну возьмем, например, такую область действительности: Предприятия (tblПредприятия) содержат подразделения (tblПодразделения), (будь то отделы или просто разные помещения), в которых создаются документы подразделений (tblДокументы). Структура БД должна обнаруживать наличие Документа1, (созданного, например, в подразделении Подразделение1), не только в самом Подразделении1, но и на донном предприятии Предприятие1.
Это по аналогии механизма поиска в Windows: если Папка2 вложена в Папку1, а Папка3 в Папку2, то поиск Windows обнаружит и отобразит искомую Папку3 как в Папке2, так и в Папке1 (это же по сути механизм объединения таблиц в Access).
Как бы вы решили это в рамках Access?
1
ltv_1953
Эксперт MS Access
12848 / 5826 / 1117
Регистрация: 21.06.2012
Сообщений: 10,492
19.03.2013, 12:56 6
Из tbОбъет3 удалить idОбъект1, оставить связь только по Id<->IdОбъект2. В подчиненной в форме frmОбъект3, если необходимо (заполнять поле уже не нужно, его нет), вычислять Id=Me.Parent.IdОбъект1.
2
Bars4
68 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 116
19.03.2013, 13:21  [ТС] 7
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Из tbОбъет3 удалить idОбъект1, оставить связь только по Id<->IdОбъект2. В подчиненной в форме frmОбъект3, если необходимо (заполнять поле уже не нужно, его нет), вычислять Id=Me.Parent.IdОбъект1.
А как при такой схеме осуществить излечение всех Объект3 для каждого из Объект1 без привлечения смежного звена Объект2 в запросе ?
0
ltv_1953
Эксперт MS Access
12848 / 5826 / 1117
Регистрация: 21.06.2012
Сообщений: 10,492
19.03.2013, 13:40 8
Еще раз - такая схема данных имеет право на существование. Но без поля idОбъект1 в tbОбъет3 можно обойтись, оно избыточно, у Вас же задана иерархия объектов. Вы уже получили проблему с подчиненными формами, с которой не смогли сами разобраться. Могут возникнуть и другие. А придумать, что сделать нельзя без этого поля, вводя искусственные ограничения - зачем? Никто же не заставляет Вас его удалить - это уже епархия Ваших преподавателей ... .
1
Bars4
68 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 116
19.03.2013, 16:03  [ТС] 9
ltv_1953, я ни в коем случае не пытаюсь искать уязвимости предложенного решения. Ваши советы для меня оказались очень полезны, а потому ценны. Я очень благодарен.
Вопрос лишь в том, что хочу рассмотреть все возможные механизмы решения иерархических задач в Access. Вот с вашей легкой руки я имею представление уже о двух возможных подходах. И каждый из этих методов может оказаться эффективнее другого для решения задач структурного представления данных. Преподаватели тут не причем.
0
ltv_1953
Эксперт MS Access
12848 / 5826 / 1117
Регистрация: 21.06.2012
Сообщений: 10,492
19.03.2013, 16:13 10
Дело не в поиске уязвимостей, а в некоторых правилах, которые не стоит нарушать. По Вашей структуре связей: пусть есть некоторая иерархия трех таблиц Организации-Подразделения-Сотрудники, во второй таблице Подразделение поменяло Организацию, а у Вас есть еще подчинение ее Сотрудников Организации ... .
1
Bars4
68 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 116
19.03.2013, 17:49  [ТС] 11
Цитата Сообщение от ltv_1953 Посмотреть сообщение
...во второй таблице Подразделение поменяло Организацию, а у Вас есть еще подчинение ее Сотрудников Организации ... .
Аргумент-то железный. И возразить нечем.

Цитата Сообщение от ltv_1953 Посмотреть сообщение
вычислять Id=Me.Parent.IdОбъект1
Id = Me.Parent. - далее интеллисерч не подсказывает, значит функция возвращает родительские объекты любого уровня несмежности ?
0
ltv_1953
Эксперт MS Access
12848 / 5826 / 1117
Регистрация: 21.06.2012
Сообщений: 10,492
19.03.2013, 22:36 12
Цитата Сообщение от Bars4 Посмотреть сообщение
Id = Me.Parent. - далее интеллисерч не подсказывает
Возможна конструкция Me.Parent.Parent.поле для обращение к полям родительской формы 2 и т.д. уровней.

По поводу моего примера - он корректен, если принята именно такая иерархия отношений между таблицами. В других случаях он некорректен. Приведен он как иллюстрация того, что не до конца продуманные решения на этапе проектирования таблиц данных и их связей могут привести либо к громоздким процессам обработки данных, либо вообще к необходимости переделать структуру данных и, уже сделанных запросов, форм и т.д.
1
Bars4
68 / 8 / 1
Регистрация: 14.03.2013
Сообщений: 116
19.03.2013, 22:42  [ТС] 13
Я извлек искомое. Спасибо !
0
19.03.2013, 22:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2013, 22:42

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

Не работает выбор подчиненных форм
Доброе время суток уважаемое сообщество Не работает выбор подчиненных форм...

Обновление и связь подчиненных форм
Ребят, нуждаюсь в скорой помощи.. 1) Связь подчиненной формы, со своей...


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

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

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