Как сделать связь многие ко многим в access

Добавил пользователь Morpheus
Обновлено: 04.10.2024

Тема урока №7. Создание базы данных. Установка связей между таблицами

Установка связей между таблицами в СУБД Access

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

В появившемся диалоговом окне Добавление таблиц необходимо выделить имена таблиц и нажать кнопку Добавить, при этом в окне "Схема данных" добавляются таблицы. После появления всех таблиц в окне Схема данных необходимо закрыть окно Добавление таблицы, щелкнув левой кнопкой мыши на кнопке Закрыть.

Следующий шаг - это установка связей между таблицами в окне Схема данных. Для этого в окне Схема данных необходимо отбуксировать (переместить) поле КодГруппы из таблицы Группы на соответствующее поле таблицы Студенты, в результате этой операции появится окно "Изменение связей".

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

В окне Схема документа появится связь один-ко-многим между таблицами Группы студентов и Студенты. Аналогичным образом надо связать поля КодСтудента в таблицах Студенты и Успеваемость, а затем поля КодДисциплины в таблицах Успеваемость и Дисциплины. В итоге получим Схему данных, представленную на рисунке.

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

В следующем уроке №8 данной рассылки мы с Вами обсудим тему: Создание базы данных (Заполнение таблиц).

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

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

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

Рис. 2.21. Схема данных

Итак, начнем с рассмотрения процедуры создания связи.

Если вы хотите создать связь между двумя таблицами, выполните следующие действия.

1. Перед созданием связи обе связываемые таблицы должны отображаться на схеме данных. Если таблица отсутствует на схеме данных, ее требуется вначале добавить. Для этого нажмите кнопку Отобразить таблицу на вкладке Конструктор . Затем в появившемся окне Добавление таблицы щелкните кнопкой мыши на названии таблицы и нажмите кнопку Добавить . После добавления всех нужных таблиц нажмите кнопку Закрыть .

2. Щелкните кнопкой мыши на названии поля, которое является первичным ключом в родительской таблице. Удерживая нажатой кнопку мыши, перетащите поле первичного ключа, наведите указатель на название того поля дочерней таблицы, которое должно стать вторичным ключом (при этом в изображении указателя появится знак +), и отпустите кнопку мыши.

3. На экране появится окно Изменение связей (рис. 2.22). В этом окне указаны названия связываемых полей. Убедитесь, что поля для создания связи выбраны верно. В случае обнаружения ошибки выберите другие поля.

Рис. 2.22. Окно Изменение связей

4. Выберите режим обеспечения целостности данных (об этом режиме подробно будет рассказано в следующем подразделе). Рекомендуется установить флажок Обеспечение целостности данных . Затем нажмите кнопку Создать .

5. Сохраните изменения схемы данных, нажав комбинацию клавиш Ctrl+S .

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

Обеспечение целостности данных

Целостность данных может нарушиться в следующих ситуациях:

• в дочернюю таблицу добавляется новая запись, содержащая некорректное (отсутствующее в первичном ключе родительской таблицы) значение вторичного ключа, или в существующей записи дочерней таблицы значение вторичного ключа изменяется на некорректное;

• из родительской таблицы удаляется запись, в результате чего ссылки на эту запись становятся некорректными;

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

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

• сохранение записи с некорректным значением вторичного ключа;

• удаление родительской записи, если для связи не установлен флажок каскадное удаление связанных записей ; либо вместе с родительской записью автоматически удаляются дочерние записи, если флажок каскадное удаление связанных записей установлен;

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

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

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

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

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

На экране появится окно Изменение связей (см. рис. 2.22). В этом окне выполните необходимые изменения и нажмите кнопку ОК .

В следующем подразделе рассказывается, как удалить ненужную или ошибочно созданную связь между таблицами.

Чтобы удалить связь, щелкните кнопкой мыши на линии связи в схеме данных (линия при этом станет жирной) и нажмите клавишу Delete . На появившейся панели подтвердите необходимость удаления связи, нажав кнопку Да .

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

Отображение дочерних записей

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

Чтобы увидеть записи, ссылающиеся на данную родительскую запись, нажмите знак + слева от записи. Откроется подтаблица, содержащая дочерние записи (рис. 2.23).

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

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

1) Перейдите в режим конструктора (кнопка Режим вкладки Главная ).

Рис. 2.23. Просмотр дочерних записей

3) В появившемся окне свойств (рис. 2.24) щелкните кнопкой мыши на значении свойства Имя подтаблицы . Справа от значения свойства появится кнопка

4) Нажмите эту кнопку и выберите из списка название дочерней таблицы, записи которой будут отображаться в подтаблице.

5) Сохраните изменения, нажав сочетание клавиш Ctrl+S .

6) Вернитесь в режим таблицы (нажмите кнопку Режим на вкладке Главная или Конструктор ).

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

Настроив связи между таблицами, вы завершили создание структуры базы данных. Последним аспектом работы с таблицами, о котором будет рассказано, станет просмотр данных в режиме таблицы.

Рис. 2.24. Выбор подтаблицы

Данный текст является ознакомительным фрагментом.

Продолжение на ЛитРес

Стереотипы связей

5.4. Настройка связей типов файлов с приложениями

5.4. Настройка связей типов файлов с приложениями Настройка программ по умолчаниюДля смены программ, устанавливаемых для определенных типов файлов по умолчанию, в Windows Vista используется специальное окно Программы по умолчанию (рис. 5.11), которое можно открыть с помощью меню

6.1.4. Работа с таблицами

6.1.4. Работа с таблицами Думаю, не нужно говорить о важности таблиц в современных документах. Ведь таблица считается одним из самых эффективных способов представления данных. Для работы с таблицами используются команды меню Таблица. Изучите это меню: оно содержит все

Работа с таблицами

2.3. Работа с таблицами

2.3. Работа с таблицами В этом разделе вы узнаете, как создать, изменить и удалить таблицу, как просмотреть информацию о ней и список всех таблиц в текущей базе данных. Начнем с наиболее сложной команды – создания таблицы.Создание таблицыЧтобы создать таблицу, выполните

15.4. Работа с таблицами

15.4. Работа с таблицами Для работы с таблицами предназначено меню Таблица, содержащее все необходимые команды: добавление и удаление строк и столбцов таблицы, объединение, разъединение ячеек и т. д.Начнем с самого начала — создадим небольшую таблицу. Для этого выполните

Организация связей между таблицами

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

12.7. Многотабличные базы данных. Отношения между таблицами

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

3.3. Работа с таблицами

3.3. Работа с таблицами Для работы с таблицами предназначено меню Таблица, содержащее все необходимые команды: добавление и удаление строк и столбцов таблицы, объединение, разъединение ячеек и т. д.Начнем с самого начала — создадим небольшую таблицу. Для этого выполните

Урок 7.4. Проектирование базы данных. Создание связей между таблицами

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

Связи между таблицами

Порядок создания связей

Практическая работа 56. Создание связей между таблицами

Практическая работа 56. Создание связей между таблицами Задание. Создать в среде Access 2007 базу данных из трех связанных таблиц согласно разработанному в этом уроке проекту.Эта работа будет объемной, поэтому ее выполнение будет разделено на несколько

Настройка параметров связей

Настройка параметров связей 1. Закройте все ранее открытые вкладки таблиц.2. На ленте откройте вкладку Работа с базами данных и нажмите кнопку Схема данных в группе Показать или скрыть. В появившемся окне вы должны увидеть таблицы базы данных и линии связи между ними. Если

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

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

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

В диалоговом окне Выбор имени измените имя, назначенное системой. Например, связующую таблицу для таблиц titles и authors можно назвать titleauthors.

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

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

Что определяет конкретная файловая система?

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

Назовите компоненты операционной системы

Компоненты операционной системы:

· Командный процессор (интерпретатор)

Перечислите группы ПО по функциональному назначению

- системное
- прикладное
- инструментальное

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

Проприета́рное ПО ( несвободное)

Дайте краткую характеристику современным универсальным операционным системам

Таким образом, современные универсальные операционные системы можно охарактеризовать, прежде всего, как:

· использующие файловые системы (с универсальным механизмом доступа к данным),

· многопользовательские (с разделением полномочий),

· многозадачные (с разделением времени).

20. Что такое утилита? Приведите примеры утилит

Утилита— вспомогательная компьютерная программа в составе общего программного обеспечения для выполнения специализированных типовых задач, связанных с работой оборудования и операционной системы (ОС)

Примеры : msconfig Дефрагментатор, speedfun – не входит в ос

Что такое файловая система?

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

Перечислите группы ПО по степени свободы распространения

Проприентарное( несвободное, закрытое) , открытое и свободное

Какие задачи выполняет файловая система?

Файловая система связывает носитель информации с одной стороны и API для доступа к файлам — с другой. Когда прикладная программа обращается к файлу, она не имеет никакого представления о том, каким образом расположена информация в конкретном файле, так же, как и на каком физическом типе носителя (CD, жёстком диске, магнитной ленте, блоке флеш-памяти или другом) он записан. Всё, что знает программа — это имя файла, его размер и атрибуты. Эти данные она получает от драйвера файловой системы. Именно файловая система устанавливает, где и как будет записан файл на физическом носителе (например, жёстком диске).

Основные функции любой файловой системы нацелены на решение следующих задач:

· программный интерфейс работы с файлами для приложений;

· отображения логической модели файловой системы на физическую организацию хранилища данных;

· организация устойчивости файловой системы к сбоям питания, ошибкам аппаратных и программных средств;

· содержание параметров файла, необходимых для правильного его взаимодействия с другими объектами системы (ядро, приложения и пр.).

Какие функции выполняет ядро ОС?

Основные функция ядра:

  • обработка прерываний;
  • создание и уничтожение процессов;
  • переключение процессов из состояния в состояние;
  • диспетчирование ;
  • приостановка и активизация процессов ;
  • синхронизация процессов ;
  • организация взаимодействия между процессами;
  • манипулирование блоками управления процессами;
  • поддержка операций ввода-вывода;
  • поддержка распределения и перераспределения памяти;
  • поддержка работы файловой системы ;
  • поддержка механизма вызова-возврата при обращении к проце­дурам;
  • поддержка определенных функций по ведению учета работы
  • машины.

Какие функции выполняет операционная система?

Функции ОС:

· Управление доступом к устройствам ввода-вывода;

· Управление файловой системой;

· Управление взаимодействием процессов, диспетчеризация процессов;

· Управление использованием ресурсов;

· Загрузка программ в оперативную память и их выполнение;

· Интерфейс с пользователем;

· Межмашинное взаимодействие (сеть);

· Защита самой системы и пользовательских данных и программ;

· Разграничение прав доступа и многопользовательский режим работы.

Основное устройство системного блока, к которому подключены все устройства системного блока.

Что необходимо для реализации технологии слияния в MS Word?

Метод слияние документов использует два вида документов:

Слияние реализуется в три этапа:

  • подготовка источника данных;
  • подготовка основного документа;
  • слияние в новый документ.

Подготовка источника данных

Источники данных могут быть практически любого типа, включая:

  • таблицу Word,
  • список контактов Microsoft Outlook,
  • электронную таблицу Excel,
  • базу данных Microsoft Access,
  • текстовый файл ASCII.

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

Некоторые особенности источников данных:

  • таблицы должны содержать строку заголовков;
  • в электронной таблице первая строка должна содержать строку заголовков;
  • в текстовом файле следует ввести разделители полей и записей.

Подготовка основного документа

При подготовке основного документа можно выбрать в меню:

  • MS OfficeXP
    Сервис --> Письма и рассылки --> Показать панель инструментов слияния
  • MS Office2000
    Сервис --> Слияние

На появившейся панели инструментов следует указать источник данных, поля и записи для заполнения подготовленного шаблона. Следует вставить в основной документ поля слияния. Эти поля указывают Microsoft Word, куда следует вставлять сведения из источника данных.

Слияние в новый документ

Разработка проекта Диски

Часть 3. Создание связей таблиц по типу Многие-ко-многим

Основные положения

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

Постановка задачи

1. Добавить в созданную базу данных таблицу Актеры.

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

3. Создать формы на основе связи Многие-ко-многим.

Рекомендуемый план разработки проекта

- КодАктера – ключевое поле код (тип данных – счетчик);

- Актер – текстовое поле необходимой длины (по умолчанию – 50);



- КодАктера – поле для выбора значений из таблицы Актеры. Для определения типа данных этого поля воспользуйтесь мастером подстановок и выберите для столбца подстановок значения поля Актер, задав ему подпись Актер. Ключевое поле на этом этапе создавать не надо;

- КодФильма – поле для выбора значений из таблицы Фильмы. Для определения типа данных этого поля воспользуйтесь мастером подстановок и выберите для столбца подстановок значения поля Название, задав ему подпись Фильм.



Рис.4


Рис.5.1

При этом соответствующие фильмы можно будет увидеть и в таблице Актеры (рис.5.2).


Вспомогательная таблица Участие (рис.5.3), благодаря которой мы установили отношение Многие-ко-многим, будет сама заполняться по мере ввода данных о фильмах и актерах.




На втором шаге предоставляется возможность выбора между подчиненными и связанными формами. В первом случае (рис.6.3) будет создана одна форма для таблицы Актеры, на которой в табличном виде будут показаны фильмы с участием соответствующего актера.



В следующем окне (рис.6.5) представлены для выбора различные стили для создаваемой формы.


На последнем шаге (рис.6.6) предлагаются имена для создаваемых форм, которые можно при необходимости изменить.



Упражнения. Совершенствование проекта

1. Создайте форму для таблицы Актеры (рис. С1) с кнопкой для вызова связанной с ней формой таблицы Фильмы (рис. С2).

Подсказка. Для этого на втором шаге (см. рис.6.3) выберите связанные формы для представления данных.



2. Создайте подчиненные формы для таблиц Фильмы и Актеры.

3. Создайте связанные формы для таблиц Фильмы и Актеры.

4. Создать запрос, в котором актерам сопоставлено количество фильмов с их участием (рис. С3).

Статья написана в учебных целях, хотя в ней есть и пара интересных неучебных нюансов.

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

Классический способ реализации такой связи - промежуточная таблица, хранящая внешние ключи категорий и объектов и реализующая, таким образом, две связи "один ко многим", на которые мы разложили наше отношение:

Сама по себе реализация такого редактора в Access несложна, вот весь процесс.

1. Создаем новую базу данных и сохраняем ее.

  • таблица "Категории" будет включать поле "Код категории", имеющее тип "Счетчик" и текстовое поле "Категория", служащее для описания; щелкнув правой кнопкой на поле "код", сделаем его ключевым:
  • таблица "Объекты" будет устроена аналогично: она включает ключевое поле-счетчик с именем "Код объекта" и текстовое поле "Объект", предназначенное для данных;
  • наконец, таблица "Связи" состоит из двух числовых полей, показанных ниже:

Обратите внимание, что оба поля я сделал ключевыми - это поможет избежать дублирования связей - например, объект 1 не должен иметь две одинаковых связи с категорией 1. Чтобы сделать оба поля ключевыми, нужно при нажатой клавише Ctrl выделить их, щелкая по области ключа, а затем вызвать правой кнопкой пункт меню.

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

4. Закрыв и сохранив схему, вносим по несколько записей в таблицы "Категории" и "Объекты".

5. Формы для работы с категориями и объектами по отдельности или в связке "главная и подчиненная таблица" сделать легко. Для последнего, например, достаточно перейти на вкладку Формы, вызвать Мастер форм, добавить для формы все поля таблиц "Категории" и "Объекты", а на следующем шаге определить главную и починенную формы. Но нас интересует сейчас не это. Главное, что мы хотим сделать - спроектировать форму "Связи" для редактирования наших данных.

6. Вызываем Конструктор форм, получаем новую пустую форму. Если окна "Раздел: область данных" (на самом деле это окно свойств) нет на экране, вызываем его, выбрав в окне формы правой кнопкой мыши пункт меню Свойства.

7. В выпадающем списке окна свойств выбираем "Форма" и назначаем на вкладке Данные нашей форме источником данных таблицу "Связи".

8. С помощью меню Вид, Панель элементов убеждаемся, что панель с интерфейсными элементами доступна. Находим на ней элемент "Список" и добавляем его на форму, при этом должен вызваться мастер "Создание списков":

Если мастера для этого или других элементов не вызываются, причин может быть 2: не нажата кнопка "Мастера" на Панели элементов или не установлены соответствующие компоненты Access.

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

9. Аналогичным образом создаем список для отображения объектов из таблицы "Объекты", а называться он будет "СписокОбъекты".

10. В принципе, все готово. Наша форма работает, в чем можно убедиться, открыв ее кнопкой Вид

11. Вернувшись в режим конструктора, добавим на свободное место кнопку и с помощью мастера "Создание кнопок" назначим ей действие "добавить запись" из категории действий "Обработка записей". Все остальное можно настроить по вкусу.

12. При выбранной кнопке в окне свойств перейдем на вкладку События и обратимся к коду сгенерированного нами обработчика:

13. Мы перепишем код сгенерированной Access процедуры так, чтобы он отслеживал ситуацию, когда в списках категорий и объектов ничего не выбрано, а также не давал повторно добавить уже существующую связь. Для последнего действия нам понадобиться выполнить из кода на VBA дополнительный запрос по извлечению выбранных на форме кода категории и кода объекта из таблицы "Связи". Если этот запрос вернет пустой результат, значит, такой связи еще нет и следует добавить запись. Сгенерировать такой запрос на вкладке "Запросы" и потом просто вызвать его, к сожалению, не получится. Дело в том, что Access не видит взятых из формы параметров запроса, если запрос выполняется программно. Ошибка, как правило, возникает со следующим текстом "Too few parameters. Expected Число" ("Слишком мало параметров. Ожидалось Число"). Эта ошибка возникает, если команда или один из нижележащих запросов содержит обращения к формам или собственные параметры, - все эти обращения будут восприняты как параметры, которым не передано значение.

Почему так происходит? По этому поводу в справке Microsoft MSDN написано примерно следующее:
NOTE: В DAO Вы должны явно присвоить значение параметру. При использовании DoCmd.OpenQuery Вы этого делать не должны, т.к. DAO использует операции низкого уровня, что даёт Вам большую свободу в использовании параметров (т.е. Вы можете сами присвоить параметру значение переменной, а не использовать ссылку на форму), но Вы должны выполнить служебные действия, которые Access делает "за кулисами" при исполнении DoCmd. С другой стороны, DoCmd работает на более высоком уровне, чем DAO. Выполняя DoCmd, Microsoft Access делает некоторые предположения о том, как поступить с параметрами, и не дает Вам никакой свободы в этом отношении.

Попросту говоря, при выполнении запроса непосредственно из окна Access он выполняется с помощью движка JET, который, будучи встроен в Access, "знает" о наличии форм и пытается найти их поля и подставить значения. При выполении запроса из кода методом Execute или иным, запрос выполняется с помощью библиотеки DAO, которая, будучи внешней, ничего "не знает" о формах ACCESS, поэтому все недостающие значения считает неопределенными.

В Интернете можно встретить советы предварительно обработать все параметры процедурой вида

Однако, для работы этого кода нужно, во-первых, иметь подключенную DAO (в окне редактора Visual Basic при остановленной программе вызвать Tools, References (или Сервис, Ссылки), найти и включить в списке библиотеку Microsoft DAO 3.6 Object Library), во-вторых, работа кода все-таки не гарантируется и в этом случае.

Мы хотим обойтись стандартным кодом

Вся проблема состоит в том, что объект RecordSet есть и в библиотеке DAO, и в используемой Access по умолчанию библиотеке ADODb! Таким образом, наличие прямой ссылки на DAO, как в показанной выше процедуре, не гарантирует работоспособность кода - может возникать куча заморочек, связанных с тем, какая библиотека подключена в данный момент и у какой выше приоритет.

Поискав (и не найдя) ответ по всему Интернету я догадался, наконец, описать RecordSet как Variant, то есть, без указания типа:

Нам остается отключить для формы встроенную навигацию (свойства "Область выделения" и "Кнопки перехода" со вкладки "Макет" окна свойств формы), добавить с помощью мастера свою навигацию и получить работающее приложение.

Это пример можно скачать и доделать, ведь область применения отношений "многие-ко-многим" так же широка, как сами эти отношения.

Читайте также: