Тема: Создание подчиненных форм в СУБД MS ACCESS

Тема: Создание подчиненных форм в СУБД MS ACCESS

Цель занятия:

— изучение информационной технологии связывания таблиц и создания многотабличных подчиненных форм в СУБД.

Задание 1. Создать таблицы «Сектор» и «Клиенты фирмы» в режиме Конструктор.

Порядок работы

1. Запустите программу СУБД Microsoft Access и откройте свою созданную базу данных. На вкладке Создание в группеТаблицы выберите Конструктор таблиц. Создайте таблицы «Сектор» и «Клиенты фирмы». Свойства полей таблиц приведены соответственно на Рис. 48 и Рис. 49.

Рис. 48. Таблица «Сектор» в режиме Конструктор

Рис. 49. Таблица «Клиенты фирмы» в режиме Конструктор

Примечание. Для задания ключевого поля выделите поле (для таблицы «Сектор» поле Номер сектора) или группу полей (для таблицы «Клиенты фирмы» поля Номер сектора и Номер клиен­та) и в группе Сервис выберите Ключевое поле.

Задание 2. Создать схему данных.

Порядок работы

1. На вкладке Работа с базами данных в группеПоказать или скрыть выберите Схема данных. Далее в группе Связи выберите Отобразить таблицу.Добавление таблиц производится из окна Добавление таблицы. Для размещения таблицы в окне Схема данныхнадо выделить ее и нажать кнопку Добавить. Выделение нескольких таблиц производится при нажатой клавише [Ctrl]. Включив все нужные таблицы в схему данных («Сектор» и «Клиенты фирмы»), закройте окно Добавление таблицы.

2. Для установления связей между парой таблиц в окне Схема данныхнадо выделить уникальное ключевое поле, по которому устанавливается связь («Номер сектора»), и при нажатой кнопке мыши протащить курсор в соответствующее поле подчиненной таблицы.

3. В появившемся окне Изменение связейотметьте галочкой операции «Объединение целостности данных», «Каскадное обновление связанных полей» и «Каскадное удаление связанных полей» (Рис. 50), после чего нажмите кнопку Создать.

Рис. 50. Создание связей между таблицами

4. Конечный вид схемы таблиц приведен на Рис. 51.

Рис. 51. Схема связанных таблиц

Задание 3.Создать многотабличную форму для одновременного ввода данных в две таблицы.

Порядок работы

Краткая справка. Таблицы «Сектор» и «Клиенты фирмы» взаимосвязаны и имеют общее поле Номер сектора, поэтому для обеспечения удобного ввода данных создадим единую форму. В форме необходимо предусмотреть основную форму с реквизитами секторов и подчиненную форму с записями о клиентах. Основной форме присвойте имя «Сектор», подчиненной – «Список клиентов».

1. Форма создается с помощью Мастера форм (Создание/Формы/Другие формы/ Мастер форм). В окне Создание форм выбираем поля, которые войдут в проектируемый макет формы из основной таблицы «Сектор» (все поля) и затем из подчиненной таблицы «Клиенты фирмы» – все поля, кроме поля Номер сектора (Рис. 52).

Рис. 52. Выбор полей для основной и подчиненной форм

5. Очередное окно мастера отображает макет формы с перечнем полей в основной и в подчиненной части формы. В этом окне выделена таблица «Сектор» как источник записей основной части формы; таблица «Клиенты фирмы» как источник данных подчиненной формы. Для непосредственного включения подчиненной формы выберем вариант «Подчиненные формы» (Рис. 53).

Рис. 53. Макет подчиненной формы

3. В последующих диалоговых окнах мастера выберите внешний вид подчиненной формы – «ленточный» и любой стиль оформления. В последнем окне мастера вводятся имена основной формы («Сектор») и подчиненной формы («Список клиентов – подчиненная форма»), а также дальнейшие действия мастера – Открытие формы для просмотра и ввода данных. В результате будет получена форма, аналогичная изображенной на Рис. 54.

Рис. 54. Двухтабличная форма, созданная Мастером форм

Ключевое поле Номер сектора не входит в подчиненную форму, так как оно присутствует в основной части формы.

4. Доработка формы в режиме Конструктор заключается в изменении надписей и размещении полей как на Рис. 55, а также в создании кнопок для управления формой.

Рис. 55. Доработка формы в режиме Конструктор

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

Активизируем в группе Элементы управления кнопку Использовать мастера, а затем используем элемент «Кнопка». После переноса кнопки курсором мыши в нужное место формы и вычерчивания ее рамки запустится мастер Создание кнопок. В окне мастера нужно выбрать действие, которое выполняется при нажатии кнопки. В группе «Категория» выберем «Переходы по записям», в группе «Действия» выберем «Предыдущая запись». Аналогичные действия выполняются при встраивании кнопок «Следующая запись»и «Закрытие формы».

5. Редактирование подчиненной формы сводится к уточнению надписей полей-столбцов, а также размеров полей. Вид двухтабличной формы после редактирования в режиме формыприведен на Рис. 56.

Рис. 56. Отредактированный вид двухтабличной подчиненной формы

Задание 4.Используя двухтабличную форму ввести исходные данные в таблицы «Клиенты фирмы» и «Сектор». Данные для ввода приведены соответственно в таблицах 3 и 4.

Краткая справка. Ввод данных производится из обеих таблиц поочередно. Сначала введите данные в основную форму для сектора 100, затем в подчиненную форму введите данные для всех четырех клиентов этого же сектора 100. Далее аналогично введите данные для сектора 200 в основную и подчиненную формы и т.д.

Источник:
http://infopedia.su/11xb9ee.html

Как сделать главную и подчиненную таблицу в access?

В Microsoft Access 2002 присутствует возможность отображения нескольких связанных таблиц в окне главной таблицы. Рассмотрим возможности отображения на примере таблиц «Типы» (Categories), «Товары» (Products) и «Заказано» (Order Details) базы данных «Борей». На рис. 2.41 изображена схема данных указанной базы. На схеме видно, что таблицы «Типы» (Categories) и «Товары» (Products) связаны отношением «один-ко-многим», т. е. одной записи в таблице «Типы» (Categories) может соответствовать множество записей таблицы «Товары» (Products). Таблица «Товары» (Products) связана с таблицей «Заказано» (Order Details) тоже отношением «один-ко-многим».

Рис. 2.41. Схема данных базы

На рис. 2.42 представлена таблица «Типы» (Categories), которая имеет подчиненную таблицу «Товары» (Products). В данном случае между областью выделения и первым столбцом таблицы существует узкий столбец, в котором для каждой записи отображается значок плюс (+). Если щелкнуть на нем левой кнопкой мыши, откроется часть подчиненной таблицы, содержащая только те записи, которые связаны с записью в главной таблице. Значок плюс при этом меняется на минус.

Изображение окна с таблицей, имеющей подчиненные таблицы, представлено на рис. 2.43. В данном случае на экран выводятся записи таблицы «Типы» (Categories) и для записей 1 и 2 открыты окна подчиненных таблиц. В окне подчиненной таблицы отображаются только те записи, которые соответствуют данной записи основной таблицы («Типы» (Categories)). В свою очередь в окне подчиненной таблицы можно также открыть вложенное окно для следующей подчиненной таблицы. В данном случае это таблица «Заказано» (OrderDetails).

Если таблица, открытая в режиме Таблицы, не имеет подчиненных таблиц, то столбец со знаками плюс и минус отсутствует.

Если таблица, открытая в режиме Таблицы, не имеет подчиненных таблиц, то столбец со знаками плюс и минус отсутствует.

Рис. 2.42. Представление данных для таблиц, имеющих подчиненные таблицы

Рис. 2.43. Отображение подчиненных таблиц

В разделе Компьютеры, Связь на вопрос Как создать подчиненную таблицу в MS Access? заданный автором Бросок лучший ответ это Открой «связи» (там кнопка есть такая на панели)
Перетяни из 1-ой таблицы нужное имя поля во 2-ую таблицу.
Теперь нажав «+» слева в строке 2-ой таблицы (в режиме просмотра) увидишь подчиненную таблицу.
Не разберешься, пиши на toshafirma@mail.ru

22 ответа

Привет! Вот подборка тем с ответами на Ваш вопрос: Как создать подчиненную таблицу в MS Access?

Ответ от Serge sheff
Если я всё правильно понял, то подчинённая таблица — это таблица, связанная с какой-то таблицей некоторим отношением, типа «один-ко-многим». Если да, то рекомендую воспользоваться «Диаграммой связей» (англ. Relationship), находиться в верхней панели инструментов

Ответ от Невроз
Чтобы получить любой ответ на вопрос по MS Access, нужно выбрать «Справку» и найти нужный раздел.

2 ответа

Привет! Вот еще темы с нужными ответами:

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

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

Создание схемы данных

Создание схемы данных начинается с выполнения команды Схема данных (Relationships) в группе Отношения (Relationships) на вкладке ленты Работа с базами данных (Database Tools). В результате выполнения этой команды открывается окно схемы данных и диалоговое окно Добавление таблицы (Show Table), в котором осуществляется выбор таблиц, включаемых в схему (см. рис. 3.48). Диалоговое окно Добавление таблицы откроется автоматически, если в базе данных еще не определена ни одна связь. Если окно не открылось, на ленте Работа со связями | Конструктор (Relationship Tools | Design) в группе Связи (Relationships) нажмите кнопку Отобразить таблицу (Show Table).

Читайте также  Создание запросов на добавление данных

Включение таблиц в схему данных

В окне Добавление таблицы (Show Table) (рис. 3.48) отображены все таблицы и запросы, содержащиеся в базе данных. Выберем вкладку Таблицы (Tables) и с помощью кнопки Добавить (Add) разместим в окне Схема данных (Relationships) все ранее созданные таблицы базы данных Поставка товаров, отображенные в окне Добавление таблицы (Show Table). Затем нажмем кнопку Закрыть (Close). В результате в окне Схема данных (Relationships) таблицы базы будут представлены окнами со списками своих полей и выделенными жирным шрифтом ключами (см. рис. 3.52).

Создание связей между таблицами схемы данных

При создании связей в схеме данных используется проект логической структуры реляционной базы данных, в котором показаны все одно-многозначные связи таблиц. Реализуются связи с помощью добавления в связанные таблицы общих полей, называемых ключом связи. При одно-многозначных отношениях между таблицами ключом связи является ключ главной таблицы (простой или составной). В подчиненной таблице он может быть частью уникального ключа или вовсе не входить в состав ключа таблицы. Одно-многозначные связи являются основными в реляционных базах данных. Одно-однозначные связи используются, как правило, при необходимости распределять большое количество полей, определяемых одним и тем же ключом, по разным таблицам, имеющим разный регламент обслуживания.

Создание связей по простому ключу

Установим связь между таблицами ПОКУПАТЕЛЬ и ДОГОВОР, которые находятся в отношении «один-ко-многим». Устанавливая связи между парой таблиц, находящихся в отношении типа 1 : M, выделим в главной таблице ПОКУПАТЕЛЬ ключевое поле КОД_ПОК, по которому устанавливается связь. Далее при нажатой кнопке мыши перетащим его в соответствующее поле подчиненной таблицы ДОГОВОР.

Поскольку поле связи является уникальным ключом в главной таблице связи, а в подчиненной таблице связи не является ключевым, схема данных в Access выявляет отношение «один-ко-многим» между записями этих таблиц. Значение «один-ко-многим» (One-To-Many) отобразится в окне Изменение связей (Edit Relationships) в строке Тип отношения (Relationship Type) (рис. 3.49).

ЗАМЕЧАНИЕ
Если поле связи является уникальным ключом в обеих связываемых таблицах, схема данных в Access выявляет отношение «один-к-одному«. Если для связи таблиц вместо ключевого поля главной таблицы используется некоторый уникальный индекс, система также констатирует отношение таблиц как 1 : М или 1 : 1.

Определение связей по составному ключу

Определим связи между таблицами НАКЛАДНАЯ ОТГРУЗКА, которые связаны по составному ключу НОМ_НАКЛ + КОД_СК. Для этого в главной таблице НАКЛАДНАЯ выделим оба этих поля, нажав клавишу , и перетащим их в подчиненную таблицу ОТГРУЗКА.

В окне Изменение связей (Edit Relationships) (рис. 3.50) для каждого поля составного ключа главной таблицы НАКЛАДНАЯ, названной Таблица/запрос (Table/Query), выберем соответствующее поле подчиненной таблицы ОТГРУЗКА, названной Связанная таблица/запрос (Related Table/Query).

Каскадное обновление и удаление связанных записей

Если для выбранной связи обеспечивается поддержание целостности, можно задать режим каскадного удаления связанных записей и режим каскадного обновления связанных полей. Такие параметры делают возможным в главной таблице, соответственно, удаление записей и изменение значения в ключевом поле, т. к. при этих параметрах система автоматически выполнит необходимые изменения в подчиненных таблицах, обеспечив сохранение свойств целостности базы данных.

В режиме каскадного удаления связанных записей при удалении записи из главной таблицы будут автоматически удаляться все связанные записи в подчиненных таблицах. При удалении записи из главной таблицы выполняется каскадное удаление подчиненных записей на всех уровнях, если этот режим задан на каждом уровне.

В режиме каскадного обновления связанных полей при изменении значения ключевого поля в записи главной таблицы Access автоматически изменит значения в соответствующем поле в подчиненных записях.

Установить в окне Изменение связей (Edit Relationships) (см. рис. 3.49) флажки каскадное обновление связанных полей (Cascade Update Related Fields) и каскадное удаление связанных записей (Cascade Delete Related Records) можно только после задания параметра обеспечения целостности данных.

После создания связей изображения таблиц могут перемещаться в пределах рабочего пространства окна схемы данных. Перемещения и изменения размеров окон со списками полей таблиц в окне схемы данных осуществляются принятыми в Windows способами.

Заметим, если каскадное удаление не разрешено, невозможно удалить запись в главной таблице, если имеются связанные с ней записи в подчиненной.
Смотрим видео:

Вот основное, что мы хотели рассказать на тему «Схема данных в Access».

Источник:
http://word-office.ru/kak-sdelat-glavnuyu-i-podchinennuyu-tablicu-v-access.html

Главные и подчиненные таблицы

Типы отношений

Любая база данных состоит из таблиц, которые связаны между собой определенными зависимостями (см. рис.11 из лабораторной работы №1), или как еще их называют отношениями.

Отношения – это связи между таблицами.

Таблица 1. Типы отношений

Главные и подчиненные таблицы

Пусть имеются отношение между двумя таблицами. Одна из таблиц будет являться главной (родительской), а вторая подчиненной (дочерней или связанной).

При отношениях «ОДИН-КО-МНОГИМ» или «МНОГИЕ-К-ОДНОМУ» таблица с отношением «ОДИН» всегда будет главной. Поле, по которому происходит связь в подчиненной таблицей, называется внешним ключом. Для связи «ОДИН-К-ОДНОМУ» главной считается та таблица, от которой вы начали проводить связь (рис.1).

Рисунок 1. Главные и подчиненные таблицы

Установление связей между таблицами

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

Рисунок 2. Пример связи между таблицами «Группа авто» и «Производители авто»

Рисунок 3. Пример связанных таблиц с разными именами полей

При создании связи между таблицами связываемые поля могут иметь разные имена,например, как в случае двух таблиц «Авто страховые копании» и «Участники ДТП» (рис.3). Для установления связи между такими таблицами необходимо изменить тип у поля из подчиненной таблицы, в нашем случае, у поля «НазванКомпан» в таблице «Участники ДТП» с Текстового на Числовое, так как связываемые поля должны иметь одинаковый тип данных, за исключением случая, когда поле первичного ключа является полем типа Счетчик. После чего в свойствах Подстановки у поля «НазванКомпан» в подчиненной таблице «Участники ДТП» ввести данные как показано на рисунке 4.

Рисунок 4. Пример уточнения свойств Подстановки для поля «НазванКомпан» из подчиненной таблицы «Участники ДТП»

Аналогично создается связь между таблицами «Авто участников ДТП» и «Производители авто» (см. рис.5).

Рисунок 5. Примеры связанных таблиц с разными именами полей

Для создания связей между таблицами MS Access имеется специальное диалоговое окно, которое называется «Схема данных».

Создание связей между таблицами:

1 ЭТАП. Добавление таблиц:

СервисСхема данных … →в окне «Добавление таблицы» выделяем имена таблиц, добавляемых в схему данных

кнопка на Панели инструментов Базы данных

2 ЭТАП. Создание (изменение связей):

зажимаем л.к.м. ключевое поле в главной таблице → перетаскиваем курсор на аналогичное поле в подчиненной таблице, после чего кнопку мыши отпускаем

Связи → Изменить связи

п.к.м.по связи→ Изменить связи

После установки всех связей между таблицами в нашей БД в окне «Схема данных» должны установиться связи, как это показано на рисунке 6.

Рисунок 6. Схема БД «Общая картотека ДТП по г. Чита»

Ввод данных и работа с записями в таблицах

До сих пор рассматривали вопросы, связанные с созданием таблиц, определением и изменением их структуры, созданием связей между таблицами. Теперь перейдем к основным возможностям, которые предоставляет MS Access при работе с записями в таблице.

Таблица 2. Работа с записями

В таблицы можно вводить не только числовые и текстовые данные, но графические.

Вставка рисунков в поле данных таблицы:

п.к.м. по рисунку, который необходимо вставить в поле данных таблицы → Открыть с помощью→ выделяем нужную часть рисунка и копируем ее → переходим в БД в режим таблицы → помещаем курсор мыши в поле, куда необходимо поместить рисунок → ПравкаСпециальная вставка → выбираем тип Picture (Рисунок)

Работа с подчиненными таблицами

В MS Access есть возможность отображения нескольких связанных таблиц в окне главной таблицы, что упрощает процесс ввода данных таблицы. Рассмотрим возможности отображения на примере таблиц «Авто страховые компании», «Участники ДТП» и «Авто участников ДТП» созданной БД (см. рис.7).

Рисунок 7. Пример трех связанных таблиц

Рисунок 8. Пример трех связанных таблиц в режиме Таблица

На рисунке 7 видно, что таблица «Авто страховые компании» имеет подчиненную таблицу «Участники ДТП». В данном случае между областью выделения и первым столбцом таблицы (рис.8) существует узкий столбец, в котором для каждой записи отображается значок плюс (+). Если щелкнуть на нем левой кнопкой мыши, откроется часть подчиненной таблицы, содержащая только те записи, которые связаны с записью в главной таблице. Значок плюс при этом меняется на минус ().

Если таблица, открытая в режиме Таблицы, не имеет подчиненных таблиц, то столбец со знаками плюс и минус отсутствует (см. рис.9).

Читайте также  Усеченные данные при импорте из Excel в поле Access Memo

Рисунок 9. Пример таблицы в режиме Таблицы, которая не имеет подчиненной таблицы

Не нашли, что искали? Воспользуйтесь поиском:

Источник:
http://vikidalka.ru/3-14117.html

Создание формы, содержащей подчиненную форму (форма с отношением «один-ко-многим»)

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

При работе с реляционными данными (т. е. связанными данными, которые хранятся в разных таблицах) нередко требуется просматривать несколько таблиц или запросов в одной форме. Например, может потребоваться одновременно просмотреть данные клиента из одной таблицы и сведения о его заказах из другой. Подчиненные формы — удобный инструмент для подобных задач, и в Access их можно быстро создать несколькими способами.

В этой статье

Сведения о подчиненных формах

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

Подчиненные формы особенно удобны для отображения данных из таблиц или запросов с отношением «один-ко-многим». Отношение «один-ко-многим» представляет собой связь между двумя таблицами, при которой значение первичного ключа каждой записи в главной таблице соответствует значению в соответствующем поле или полях нескольких записей в связанной таблице. Например, можно создать форму, в которой отображаются сведения о сотрудниках и которая содержит подчиненную форму с заказами каждого сотрудника. Данные в таблице «Сотрудники» являются в отношении стороной «один». Данные в таблице «Заказы» являются в отношении стороной «многие» — для каждого сотрудника может быть несколько заказов.

1. В основной форме отображаются данные на стороне отношения «один».

2. В подчиненной форме выводятся данные на стороне отношения «многие».

Основная и подчиненная формы взаимодействуют таким образом, что в подчиненной выводятся только те записи, которые связаны с текущей записью в основной. Например, если в основной форме отображаются данные Ольги Зуевой, то в подчиненной отображаются только ее заказы. Если связь между основной и подчиненной формами была разорвана, то в подчиненной форме будут отображаться заказы всех сотрудников, а не только Ольги.

В таблице ниже описаны некоторые термины, связанные с подчиненными формами. Access будет обрабатывать большинство данных, если вы используете процедуры, описанные в этой статье, но полезно знать, что происходит в фоновом режиме, если вам необходимо внести изменения позже.

Источник:
http://support.microsoft.com/ru-ru/office/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%84%D0%BE%D1%80%D0%BC%D1%8B-%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D1%89%D0%B5%D0%B9-%D0%BF%D0%BE%D0%B4%D1%87%D0%B8%D0%BD%D0%B5%D0%BD%D0%BD%D1%83%D1%8E-%D1%84%D0%BE%D1%80%D0%BC%D1%83-%D1%84%D0%BE%D1%80%D0%BC%D0%B0-%D1%81-%D0%BE%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC-%C2%AB%D0%BE%D0%B4%D0%B8%D0%BD-%D0%BA%D0%BE-%D0%BC%D0%BD%D0%BE%D0%B3%D0%B8%D0%BC%C2%BB-ddf3822f-8aba-49cb-831a-1e74d6f5f06b

Создание подчиненной формы в БД Access 2003

Создание подчиненной формы в БД Access 2003

В процессе создания приложения СУБД Access или базы данных решаются две основные проблемы: первая – создание структуры БД (таблиц и связей между ними), вторая – организация интерфейса пользователя для работы с БД. Основным средством организации интерфейса пользователя в приложениях СУБД Access являются формы, которые могут быть использованы для ввода, редактирования, вывода данных и других целей.

Если в одной форме требуется просматривать данные из нескольких таблиц или запросов, то для этой цели необходимо применить подчиненные формы. Подчиненная форма – это форма, вставленная в другую форму. Например, подчиненную форму можно использовать при просмотре информации о студентах факультета в группах на примере базы данных Training_students_VP.

Подчиненные формы целесообразно создавать для отображения данных из таблиц, имеющих отношение «один-ко-многим». На примере базы данных Training_students_VP рассмотрим технологию создания подчиненной формы, которая имеет две таблицы «Группы студентов» и «Студенты» связанные отношением «один-ко-многим» (Рис.1)

Если в окне базы данных Training_students_VP открыть таблицу «Группы студентов», то можно увидеть, что рядом с каждой записью таблицы помещен знак «+» (Рис. 2).

то означает, что у этой таблицы появилась подтаблица. Если щелкнуть на знаке «+», например, перед второй записью, то отобразится таблица «Студенты» и мы увидим, что в группе БФ-16б числится два студента (Ильин и Иванов). Теперь создадим подчиненную форму, содержащую эти две таблицы. Существует несколько способов создания подчиненных форм. Наиболее простой способ создания подчиненных форм – это создание Автоформы.

Для создания Автоформы необходимо на вкладке Таблицы в окне базы данных выделить таблицу «Группы студентов» и на панели инструментов щелкнуть кнопку «Новый объект: форма». В открывшемся меню надо выбрать команду Автоформа, в результате получим Главную форму «Группы студентов», в которую вставлена подчиненная таблица «Студенты». Затем сохраним форму как «Группы студентов_ПФ» и закроем ее. Скриншот Главной и подчиненной формы представлен на Рис. 3.

Преобразуем полученную форму. Для этого в режиме конструктора в Главной форме удалим поле КодГруппы, слово «Название» заменим на «Группа» и изменим некоторые размеры формы. После проведенных изменений, автоформа (под имененм Podch_gr_st_a) будет иметь вид, представленный на Рис. 4.

Создать подчиненную форму можно и с помощью Конструктора. Для этого в окне базы данных надо перейти на вкладку формы и щелкнуть на кнопке создать, а в качестве источника данных выбрать таблицу «Студенты» и щелкнуть ОК. В полученную пустую стандартную форму требуется перетащить поля: Фамилия, Имя, Отчество, пол, дата рождения и другие необходимые поля, а затем сохранить и закрыть данную форму.

Аналогично надо создать вторую (главную) форму «Группы студентов». В качестве источника данных выбрать «Группы студентов» и щелкнуть ОК. В полученную форму требуется перетащить поля: Название, Курс и Семестр. Кроме того, в полученной форме предусмотреть место для таблицы «Студенты», а затем сохранить данную форму.

Затем на форму «Группы студентов» открытую в режиме конструктора можно перетащить подчиненную форму «Студенты» из окна базы данных. В результате получим Главную форму «Группы студентов», в которую вставлена подчиненная таблица «Студенты».

© Обучение в интернет, .
Обратная связь

Источник:
http://www.lessons-tva.info/articles/informat/10.html

Access! Добавление записей в подчиненную таблицу

1) Подскажите пожалуйста, как организовать добавление n записей (где n — значение поля в форме) в подчиненную таблицу(форму) автоматически (есть формула) при нажатии на кнопку в форме.

2) Как при включении флажка (лог. поле в таблице) сделать всю запись нередактируемой?

3) Если в меню Access Add-Ins нет packaging Wizard, значит не сделать независимого приложения или?

19 ответов

Способов масса:
1. через DoCmd:
‘ переводим фокус в подч. форму (нак какой-нибудь элем.)
‘ делается это в 2 этапа
Forms![Главн_форма]![Подч_форма].SetFocus
Forms![Главн_форма]![Подч_форма].Form![Имя_Контрол].SetFocus
DoCmd.GoToRecord ,,acNewRec
‘ заполняем поля в новой записи и повторяем все дальше

Dim dbs As Database, rst As Recordset, rstClone As Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(«Таблица1», dbOpenDynaset)
With rst
.AddNew
!Поле1 = «ля-ля»
!Поле2 = «ля-ля»
.Update
End With

‘ обновление формы и переход на последнюю запись
Forms![Главн_форма].Requery
Set rstClone = Forms![Главн_форма].RecordsetClone
rstClone.MoveLast
Forms![Главн_форма].Bookmark = rstClone.Bookmark

rst.Close
rstClone.Close
Set dbs = Nothing

3. Практически также через ADO (только название методов чуть другие)

4. Если записи, которые необходимо добавить находятся в другой таблице, то добавление можно сделать через запрос на добавление записи:

Dim dbs As Database, strSQL as String

On Error GoTo Err_Execute
Set dbs = CurrentDb
strSQL=»INSERT INTO Таблица1( Поле1 ) » _
«SELECT Таблица2.Поле1 » _
«FROM Таблица2 » _
«GROUP BY Таблица2.Поле1 » _
«HAVING Таблица2.Поле1)=’aaaa'»

Exit_:
Set dbs = Nothing
Exit sub ‘ или Function

Err_Execute:
MsgBox «Error number: » & Err.Number & vbCr & Err.Description
Resume Exit_

Я так понимаю, что необх. запретить редактировать запись в форме:
Me.AllowEdits=False
это же свойство можно сразу установить в совйствах формы (в рус. Access: Данные->Разрешить изменение)

Можно еще открывать набор записей в форме не как динамический набор(по умолч.), а как статический набор.

Не знаю не использовал, но если его нет, то естественно сделать ничего нельзя. А зачем это? все равно твоя база будет только через Access работать, тайно или явно.
Может я конечно ошибаюсь, но что-то я не видел, чтобы базу на Access можно было так упаковать, чтобы таскать потом ее как отдельное приложение (это надо ядро засунуть туда, все библиотеки, тот еще монстр будет.. 🙂 )

Спасибо, что откликнулись, только у меня ничего не получилось. ( На данную строку Set dbs = CurrentDb сваливается ошибка о несоответствии типа (используя модель ДАО). А функцию OpenRecordset вообще не находит..(( В Tools->Referens поставлена галочка напротив Microsoft DAO 3.6 Object Library, а в object браузере функция находится. В чем тут может быть дело? Или может избрать другой путь решения? Если можно, напишите более подробно как решить такую задачу:

Необходимо добавить в подчиненную таблицу Col — количество (значение поля в главной форме) записей такого вида:

for i=1 to Col
[подчин. форма]!pdУник.=[главн. форма]!glУникПоле
[подчин. форма]!pdНомерПП = i
[подчин. форма]!pdДата1 = DateAdd(«m»,i,»[главн. форма]!glДата»)
[подчин. форма]!pdПоле3= [главн. форма]!glПоле00/[главн. форма]!glПоле01
.
[подчин. форма]!pdПоле6 = еще что-нибудь зависящее от i
next i

И еще, поподробнее насчет «галочки». Лог. поле есть в подчиненной таблице. По умолчанию — это поле равно False, но когда пользователь ставит галку, вся запись должна стать нередактируемой, вроде как ОТМЕЧЕНО/ОПЛАЧЕНО и боле не пригодится, но НЕ ВСЕ ЗАПИСИ в таблице, а только одна.

Спасибо.
PS: про самостоятельное приложение вычитала в книге, и вообще я только начинающий специалист, не судите строго. )))

Читайте также  Возможно ли сделать из

Originally posted by natalia
Спасибо, что откликнулись, только у меня ничего не получилось. ( На данную строку Set dbs = CurrentDb сваливается ошибка о несоответствии типа (используя модель ДАО). А функцию OpenRecordset вообще не находит..(( В Tools->Referens поставлена галочка напротив Microsoft DAO 3.6 Object Library, а в object браузере функция находится. В чем тут может быть дело? Или может избрать другой путь решения? Если можно, напишите более подробно как решить такую задачу:

Необходимо добавить в подчиненную таблицу Col — количество (значение поля в главной форме) записей такого вида:

for i=1 to Col
[подчин. форма]!pdУник.=[главн. форма]!glУникПоле
[подчин. форма]!pdНомерПП = i
[подчин. форма]!pdДата1 = DateAdd(«m»,i,»[главн. форма]!glДата»)
[подчин. форма]!pdПоле3= [главн. форма]!glПоле00/[главн. форма]!glПоле01
.
[подчин. форма]!pdПоле6 = еще что-нибудь зависящее от i
next i

И еще, поподробнее насчет «галочки». Лог. поле есть в подчиненной таблице. По умолчанию — это поле равно False, но когда пользователь ставит галку, вся запись должна стать нередактируемой, вроде как ОТМЕЧЕНО/ОПЛАЧЕНО и боле не пригодится, но НЕ ВСЕ ЗАПИСИ в таблице, а только одна.

Спасибо.
PS: про самостоятельное приложение вычитала в книге, и вообще я только начинающий специалист, не судите строго. )))

Если бы мне надо было бы это сделать, то я пошел бы через DAO (хоть друг Билл и товарищ Гетц и призывает переходить на ADO, но DAO пока роднее). Но тут для тебя важна сама суть, а она такая же, что в DAO, что в ADO, а переписать не проблема.
Значит так это выглядит:

Dim dbs As DAO.Database, rst As DAO.Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(«Таблица1», dbOpenDynaset)
for i=1 to Col
With rst
.AddNew
!pdУник = Forms![главн. форма]!glУникПоле
!pdНомерПП = i
.
.Update
End With
Next i

rst.Close
rstClone.Close
Set dbs = Nothing

По поводу ругани на CurrentDb, давай разбираться. Значит говоришь Microsoft DAO 3.6 Object Library подключено — это хорошо. Тут может быть конфликт имен, это когда в разных библиотеках используют одинаковые имена объектов или методов, поэтому давай с тобой объявим переменные с указанием полного пути (в смысле всех родителей): DAO.Database и DAO.Recordset — так должно все сработать (конфликт может быть с одной из библиотек ADO), если не получится, пиши, подумаем. 🙂

Насчет галочки: Вопрос такой, как ты записи выводишь, через обычную форму или ленточную/табличную?

В первом случае пользователь видит только одну запись, ее мы блокируем (в пред. посте), при переходе на другую запись, проверяем и снимаем/устан. блокировку.

Во втором случае, можно работать также, при переходе к другой записи, в событии Current делаем проверку и опред. блокировать ли тек. запись или нет. В принципе также можно блокировать не всю запись, а только отд. поля (у них тоже есть свойства Доступ и Блокировка)

Получилось! Получилось! Спасибо! Вот только не с первого разу, вот это то я и упустила (дура глупая):

Forms![гл. форма].Requery
Set rstClone = Forms![гл. форма].RecordsetClone
rstClone.MoveLast
Forms![гл. форма].Bookmark = rstClone.Bookmark

и тут же вопрос — это дело я вставила в цикл до next i, может неправильно, а? А то записи ТО правильно добавляются, ТО их больше в два раза от того, что уникальное поле запоминается из предыдущей записи.. странно как-то. Подскажите этот момент поподробнее и эту часть кода, что она выполняет? Что за RecordsetClone? :)))

——
С галочкой я так поступаю, может вовсе некорректно:

Private Sub flag_Click()
If flag=True Then
Form_podForm1.pddate.Enabled = False
Else
Form_podForm1.pddate.Enabled = True
End If
End Sub

в итоге во ВСЕХ записях поле pddate становится недоступным. Как же сделать это Enabled только для той записи, в которой я ставлю галочку?

Простите, что повторяюсь с вопросами, хочу разобраться, и немного туплю.. Но я стараюсь..))))
Спасибо. Жду.

Originally posted by natalia
Получилось! Получилось! Спасибо! Вот только не с первого разу, вот это то я и упустила (дура глупая):

Forms![гл. форма].Requery
Set rstClone = Forms![гл. форма].RecordsetClone
rstClone.MoveLast
Forms![гл. форма].Bookmark = rstClone.Bookmark

и тут же вопрос — это дело я вставила в цикл до next i, может неправильно, а? А то записи ТО правильно добавляются, ТО их больше в два раза от того, что уникальное поле запоминается из предыдущей записи.. странно как-то. Подскажите этот момент поподробнее и эту часть кода, что она выполняет? Что за RecordsetClone? :)))

Этот кусок кода я опустил в последнем примере, потому как подумал, что для твоей ситуации он не очень критичен.

А смысл его вот какой:

Когда ты обращаешься к таблице программно напрямую (через DAO, ADO и т.д.), а в это же время эта таблица показывается в форме, то все твои изменения в таблице не будут отображены, пока ты принудительно не заставишь Access обновить выводимую таблицу в форме через метод формы — Requery.

Т.е. в твоем случае надо в конце написать:
Forms![Гл_форма]]![Подч_форма].Form.Requery

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

Но у этого метода такой недостаток, чтобы так написать, надо (ОБЯЗАТЕЛЬНО) перевести фокус на элемент (любой) этой подчин. формы., т.е. в итоге:

Forms![Гл_форма]]![Подч_форма].Form.Requery
Forms![Главн_форма]![Подч_форма].SetFocus
Forms![Главн_форма]![Подч_форма].Form![Имя_Контрол].SetFocus
DoCmd.GoToRecord ,,acLast

Тебе такой вариант может подойти.

Но вот существуют ситуации когда переводить фокус на форму ради этого действия очень не хочется.
Например: пользователь работает с одной подч. формой (главный экран), нажимает кнопки, обрабатывает что-то, а на этой же форме, но на другой вкладке другая подчин. форма где ведется лог. И вот в этот лог надо добавить запись и перейти в конец (на последнюю запись, чтобы опять же не прокручивать всю эту форму).
Если мы будем действовать по приведенному выше коду, то у пользователя быстро переключится вид на форму с логом, добавиться запись, обновиться, перескочет на последнюю и только потом его бедного опять вернут к своей любимой форме. 🙂
Приятного мало.

Подитожу. Процесс добавления записей и Requery можно производить с неактивной (ее вообще может быть не видно) формой, а вот для того что перейти в этой НЕАКТИВНОЙ форме на последнюю запись, я и применяю этот код:
Set rstClone = Forms![Главн_форма].RecordsetClone
rstClone.MoveLast
Forms![Главн_форма].Bookmark = RecordsetClone.Bookmark

Делает он следующее.
У каждой формы есть свойство RecordsetClone, которое возвращает объект Recordset (набор записей, про него в справке лучше почитай), в котором находятся записи этой формы. По сути Recordset эта таже таблица, только в виде объекта DAO для того чтобы можно было делать всякие вещи с полями и записями как с обычными объектами в языках программирования.
В этом rstClone мы по умолчанию стоим на первой записе. Переходим на последнюю — rstClone.MoveLast
Теперь используем свойство Bookmark — закладка. Эта Bookmark для того, чтобы можно было поставить закладку, а потом быстро вернуться на нужную запись в Recordset или в форме (она тоже поддерживает закладки). Вот и мы и переходим в форме на ту же запись, что уже перешли в объекте RecordsetClone.

Это свойство Bookmark может немного смутить. У него такая хитрость:
Когда мы обращаемся (ЧИТАЕМ) к свойству -RecordsetClone.Bookmark — то оно возвращает закладку на активную запись в объекте RecordsetClone. Мы например, можем эту закладку сохранить в отд. переменной:
Dim bk as Bookmark
Set bk=RecordsetClone.Bookmark
и потом ее использовать где-нибудь дальше.

А вот когда мы присваиваем (ПИШЕМ) этому свойству RecordsetClone.Bookmark = bk другую закладку, это значит, мы меняем активную запись на ту, которая была активна, когда считывалась эта закладка (bk), т.е. просто переходим на указанную запись.
В нашем примере эти два действия сразу в одной строке получились:
Forms![Главн_форма].Bookmark = RecordsetClone.Bookmark

——
С галочкой я так поступаю, может вовсе некорректно:

Private Sub flag_Click()
If flag=True Then
Form_podForm1.pddate.Enabled = False
Else
Form_podForm1.pddate.Enabled = True
End If
End Sub

в итоге во ВСЕХ записях поле pddate становится недоступным. Как же сделать это Enabled только для той записи, в которой я ставлю галочку?

А оно и будет заблокировано во всех выводимых записях, но так пользователь не может работать сразу с несколькими, а только с одной, то как только он будет переходить к следующей записи, мы будем решать: блокировать ее или нет.

К твоему коду, надо добавить еще код обработчик событии формы Current (возникает при ЛЮБОМ переходе польз. к другой записе):

Private Sub Form_Current()
If flag=True Then
Form_podForm1.pddate.Enabled = False
Else
Form_podForm1.pddate.Enabled = True
End If
End Sub

Так что мы всегда его опередим и пользователь от нас не уйдет 🙂

Источник:
http://forum.codenet.ru/q7331/