Как связать списки в access

Обновлено: 28.04.2024

и при казалось бы логичных вещах - столкнулся с проблемой.
___________________________
Казалось бы - все просто
КОМПАНИЯ - у которой есть - ФИЛИАЛЫ - у которых есть - ПОМЕЩЕНИЯ - в которых сидят - ОТДЕЛЫ - в которых находятся СОТРУДНИКИ.

Связываем списки
Компания -> КФ КФ -> КФП КФП -> КФПО КФПО -> КФПОС ___________________________

- Хочу СОТРУДНИКУ выбрать КОМПАНИЮ, ФИЛИАЛ, ПОМЕЩЕНИЕ, ОТДЕЛ. По связанному пути. Допустим выбираю КОМПАНИЮ - сразу все данные в цепочке подтянулись под компанию, выбираю ФИЛИАЛ КОМПАНИИ и тд.
Так же можно выбрать допустим ОТДЕЛ и он под этот отдел в списках КОМПАНИЯ или ПОМЕЩЕНИЕ и т.д выбирает именно те данные что в цепочке.

- Что бы нельзя было повторно добавлять по одинаковые позиции.
У КОМПАНИИ могут быть много ФИЛИАЛОВ но они не повторяются.

Допускается:
Компания1 - Филиал1
Компания 1 - Филиал2

Не допускается
Компания1 - Филиал1
Компания 1 - Филиал1
___________________________

Буду очень благодарен за помощь.
Я абсолютно новый человек в Access, все время в Excel провел - там выпадающие списки очень просто реализуются.

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

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

В этой статье

Типы списков

Программой Access предусмотрены два типа элементов управления "Список": список и поле со списком.

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

Поле со списком. Данный элемент управления является более компактным способом отображения списка вариантов: список скрыт до тех пор, пока пользователь не нажмет кнопку раскрытия списка. Кроме того, поле со списком позволяет вводить значения, не содержащиеся в списке. Таким образом, этот элемент управления объединяет в себе функции текстового поля и списка.

1. Нажмите стрелку, чтобы отобразить раскрывающийся список.

2. Выберите необходимый вариант из раскрывающегося списка.

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

Создание списка или поля со списком с помощью мастера

В области навигации щелкните форму правой кнопкой мыши и выберите команду Конструктор.

Примечание: Предполагается, при выполнении этой процедуры форма связана с таблицей или запросом. Некоторые из шагов неприменимы к свободным формам. Чтобы узнать, связана ли данная форма с таблицей или запросом, нажмите клавишу F4, после чего откроется страница свойств. На вкладке Данные страницы свойств в поле свойства Источник записей отображаются таблица или запрос, с которыми связана данная форма.

На вкладке Конструктор в группе Элементы управления выберите параметр Использовать мастера .

Выберите либо средство списка, либо поле со списка.

Нажмите в форме место, в которое нужно поместить список или поле со списком.

В зависимости от сделанного выбора запустится мастер списков или мастер полей со списком.

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

Чтобы использовать текущие данные из источника записей, выберите вариант Объект "список" будет использовать значения из таблицы или запроса.

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

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

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

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

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

Чтобы создать связанный элемент управления, выберите параметр Сохранить в поле и укажите поле, к которому должен быть присоединен элемент управления.

Создание списка или поля со списком путем добавления поля подстановок в форму

Связанные списки или поля со списком можно создавать путем добавления поля подстановок в форму.

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

Дополнительные сведения о создании многофаентных полей подпапок см. в статье "Создание и удаление многоценного поля".

Выполните одно из следующих действий:

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

Программа Access автоматически создаст поле со списком для поля подстановок.

Добавьте в форму список или поле со списком.

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

Если область Список полей не отображается, нажмите клавиши ALT+F8, чтобы открыть ее.

Дважды нажмите поле подстановок или перетащите его из области Список полей в форму. Программа Access автоматически создаст поле со списком, связанное с этим полем.

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

Создание списка или поля со списком без использования мастера

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

Откройте форму в режиме конструктора.

На вкладке Конструктор в группе Элементы управления отмените выбор параметра Использовать мастера.

Щелкните инструмент "Список или поле со списка.

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

Чтобы открыть станицу свойств элемента управления, при выделенном элементе управления нажмите клавишу F4.

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

Значение свойства "Тип источника строк".

Задайте следующее значение свойства "Источник строк":

Показать значения из таблицы или запроса либо результатов инструкции SQL

Таблица/запрос

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

Введите инструкцию SQL.

На вкладке "Данные" в окне свойств щелкните , чтобы открыть построитель запросов. Дополнительные сведения о создании запросов см. в статье Создание простого запроса на выборку.

Показать фиксированный список значений

Список значений

Введите список фиксированных значений, разделенных точками с за semicolons(;). Например, "Север"; Южный; Восток; Запад

На вкладке "Данные" окна свойств щелкните , чтобы открыть диалоговое окно "Изменение элементов списка", и введите элементы в отдельных строках.

Показать список полей из таблицы или запроса

Список полей

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

Если вы хотите включить в элемент управления несколько столбцов, перейдите к ячейке свойства Число столбцов и введите их число. Задайте ширину столбцов с помощью свойства Ширина столбцов. Чтобы получить дополнительные сведения о каждом свойстве установите курсор в поле этого свойства и нажмите клавишу F1.

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

Настройка списка или поля со списком

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

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

Перейдите на вкладку Данные и нажмите поле свойства Источник строк.

На вкладке "Данные" в окне свойств щелкните , чтобы открыть построитель запросов.

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

Присоединение столбца списка или поля со списком

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

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

Скрытие столбца в списке или в поле со списком в форме

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

Предположим, что у вас есть присоединенное поле со списком из двух столбцов: "КодПоставщика" шириной 1 см и "ИмяПоставщика" шириной 5 см. Столбец "КодПоставщика" — первый столбец списка, поэтому для свойства Ширина столбцов задано значение 1см;5см. Чтобы скрыть столбец "КодПоставщика", установите для свойства Ширина столбцов значение 0см;5см. Столбец "КодПоставщика" остается присоединенным, несмотря на то, что он скрыт.

Примечание: Если список не раскрыт, в поле со списком отображается первый видимый столбец списка. Например, в предыдущем примере будет отображаться столбец "ИмяПоставщика", поскольку столбец "КодПоставщика" скрыт. Если бы он не был скрытым, в поле отображались бы значения из этого столбца, а не столбца "ИмяПоставщика".

Добавление заголовков столбцов в поле со списком в форме

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

Если поле со списком или список созданы на основе источника записей, программа Access будет использовать имена полей этого источника записей в качестве заголовков столбцов. Если поле со списком или список созданы на основе списка фиксированных значений, то в качестве заголовков столбцов программа Access будет использовать первые n элементов списка значений (заданных в свойстве Источник строк), где n равно значению свойства Число столбцов.

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

В поле свойства Автоподстановка задайте значение Нет.

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

Настройка ширины списка для поля со списком в форме

Введите в поле свойства Ширина списка значение ширины в текущих единицах измерения (заданных в панели управления Windows). Чтобы использовать единицы измерения, отличные от принятых по умолчанию, введите обозначение единиц измерения. Например, введите значение 2 см. Убедитесь, что оставлено достаточно места для полосы прокрутки.

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

Настройка максимального числа строк, отображаемых в поле со списком в форме

Введите число в поле свойства Число строк списка.

Если фактическое количество строк списка превышает значение, указанное в свойстве Число строк списка, при раскрытии списка отображается вертикальная полоса прокрутки.

Ограничение значений поля со списком элементами, присутствующими в списке в форме

В поле свойства Ограничиться списком выберите значение Да.

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

Если для свойства Ограничиться списком задано значение Нет, то при вводе в присоединенное поле со списком значения, которого нет в списке, это значение заносится в базовое поле, но не добавляется в список. Чтобы добавить в список элементы, используйте свойство Отсутствие в списке и событие Нет в списке.

Внимание! Материал, изложенный в этой статье, требует знания пользовательского интерфейса на компьютерах с одним пользователем. Эта статья относится только к базе данных Microsoft Access (.mdb или .accdb).

Аннотация

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

  • Что такое связи между таблицами?
  • Виды связей между таблицами
    • Связи "один ко многим"
    • Связи "многие ко многим"
    • Связи "один к одному"
    • Как определить связи "один ко многим" или "один к одному"
    • Как определить связь "многие ко многим"

    Что такое связи между таблицами?

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

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

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

    Логические связи в базе данных позволяют эффективно запрашивать данные и создавать отчеты.

    Виды связей между таблицами

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

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

    Связи "один ко многим"

    Связь "один ко многим" являются наиболее распространенным типом связи. В такого рода связях строка в таблице А может иметь много строк в таблице B. Но строка в таблице B может иметь только одну строку в таблице А. Например, таблицы "Издатели" и "Названия" имеют связь "один ко многим". То есть, каждый издатель выпускает много названий. Но каждое название принадлежит только одному издателю.

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

    В окне связей в Access, сторона первичного ключа связи "один ко многим" обозначается номером 1. Сторона внешнего ключа связи обозначается символом бесконечности.

    Снимок экрана с примером отношений «один ко многим» в окне отношений в Access.

    Связи "многие ко многим"

    В связи "многие ко многим" строка в таблице А может иметь много совпадающих строк в таблице B, и наоборот. Вы создаете такую связь, определяя третью таблицу, которая называется промежуточной таблицей. Первичный ключ промежуточной таблицы состоит из внешних ключей как таблицы А, так и таблицы B. Например, таблица "Авторы" и таблица "Названия" имеют связь "многие ко многим", которая определяется связью "один ко многим" из каждой из этих таблиц к таблице "TitleAuthors". Первичным ключом таблицы "TitleAuthors" является комбинация столбца au_ID (первичный ключ таблицы "Authors") и столбца title_ID (первичный ключ таблицы "Titles").

    Снимок экрана с примером отношений «многие ко многим» в окне отношений в Access.

    Связи "один к одному"

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

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

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

    В Access сторона первичного ключа связи "один к одному" обозначается символом ключа. Сторона внешнего ключа также обозначается символом ключа.

    Как определить связи между таблицами

    При создании связи между таблицами связанные поля не должны иметь одни и те же имена. Однако связанные поля должны иметь один и тот же тип данных, если только поле первичного ключа не является полем AutoNumber. Вы можете сопоставить поле AutoNumber с полем Number, только если свойство FieldSize обоих совпадающих полей совпадает. Например, можно сопоставить поле AutoNumber и поле Number, если свойство theFieldSizeproperty обоих полей имеет значение Long Integer. Даже если оба совпадающих поля являются числовыми полями, они должны иметь параметр sameFieldSizeproperty.

    Как определить связи "один ко многим" или "один к одному"

    Чтобы создать связь "один ко многим" или "один к одному", выполните следующие действия.

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

    В Access 2002 и Access 2003 выполните следующие действия.

    1. Нажмите F11, чтобы переключиться в окно базы данных.
    2. В меню Инструменты выберите Связи.

    В Access 2007, Access 2010 или Access 2013 нажмите Связи в группе Показать/Скрыть на вкладке Инструменты базы данных.

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

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

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

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

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

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

    Повторите шаги с 4 по 7 для каждой пары таблиц, которые вы хотите связать.

    При закрытии диалогового окна Изменение связей Access спрашивает, хотите ли вы сохранить макет. Сохраняете ли вы макет или не сохраняете макет, созданные вами связи сохраняются в базе данных.

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

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

    Чтобы создать связь "многие ко многим", выполните следующие действия.

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

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

    В связующей таблице установите первичный ключ, чтобы включить основные ключевые поля из двух других таблиц. Например, в связующей таблице "TitleAuthors" первичный ключ будет состоять из полей OrderID и ProductID.

    Чтобы создать первичный ключ, выполните следующие действия:

    Откройте таблицу в Конструкторе.

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

    В Access 2002 или в Access 2003 нажмите на Первичный ключ на панели инструментов.

    В Access 2007 нажмите на Первичный ключ в группе Инструменты на вкладке Дизайн.

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

    Определите связь один-ко-многим между каждой основной и связующей таблицами.

    Целостность данных

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

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

    При использовании целостности данных применяются следующие правила:

    • Невозможно ввести значение во внешнем ключевом поле связанной таблицы, которое не существует в первичном ключе первичной таблицы. Тем не менее, можно ввести значение Null во внешнем ключе. Это указывает на то, что записи не связаны между собой. Например, невозможно иметь заказ, который назначается клиенту, который не существует. Тем не менее, можно иметь заказ, который не назначается никому, введя значение Null в поле CustomerID.
    • Вы не можете удалить запись из основной таблицы, если в соответствующей таблице существуют соответствующие записи. Например, вы не можете удалить запись сотрудника из таблицы "Сотрудники", если в таблице "Заказы" есть заказы, назначенные сотруднику.
    • Невозможно изменить основное ключевое значение в основной таблице, если эта запись имеет соответствующие записи. Например, вы не можете изменить идентификатор сотрудника в таблице "Сотрудники", если в таблице "Заказы" есть заказы, назначенные этому сотруднику.

    Каскадные обновления и удаления

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

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

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

    Типы соединения

    Существует три основных типа соединения: Вы можете увидеть их на следующем снимке экрана:

    Снимок экрана параметров объединения, на котором показаны три типа объединения.

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

    Вариант 2 определяет левое внешнее соединение. Левое внешнее соединение — это соединение, в котором все записи с левой стороны операции LEFT JOIN в оператора запроса SQL добавляются к результатам запроса, даже если нет соответствующих значений в объединенном поле из таблицы на правой стороне.

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

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

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

    Схема БД Сотрудники

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

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

    Окно управления БД Сотрудники

    Как решить эту типовую задачу, мы и поговорим.

    1. Источником записей формы "Сотрудники" делаем соответствующую таблицу, форму можно сгенерировать мастером, а затем удалить из неё поля "Код отдела" и "Код должности".

    • форма выведена в режиме конструктора, нажимаем кнопку "Поле со списком", показываем мышкой границы будущего списка. По отпускании кнопки мыши появится окно "Мастер создания полей со списком";
    • выбираем "Объект будет использовать значения из таблицы или запроса", жмём "Далее";
    • выбираем таблицу "Отделы", жмём "Далее";
    • переносим оба поля таблицы отделов в №выбранные поля" (кнопкой >>), жмём "Далее";
    • убеждаемся, что список виден, а галочка "Скрыть ключевой столбец" включена, жмём "Далее";
    • выбираем "Сохранить в поле:" и поле "КодОтдела", жмём "Далее"; задаём подпись к списку и жмём "Готово".

    3. С помощью конструктора запросов составляем следующий запрос:

    Запрос Должности по отделам

    Здесь "ПолеСоСписком16" - наименование компоненты верхнего списка.

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

    Окно свойств второго списка

    Увидеть это окно можно, щёлкнув правой кнопкой мыши на втором списке и выбрав "Свойства".

    5. Теперь самое главное. В списке компонент выбираем "Форма" вместо имени поля со списком, выбираем вкладку события, событие Текущая запись, щёлкаем по кнопке с многоточием, подтверждаем, что нам нужен построитель программы, а не макроса или выражения:

    Выбор события

    Открылся редактор Visual Basic и появилась пустая функция с именем Form_Current . Пишем туда единственную строчку кода, которая обновит нижний список:

    Здесь предполагается, что имя нижнего списка ПолеСоСписком20 .

    6. Ту же самую строчку кода добавляем на событие "До обновления" верхнего списка, у меня получилось вот что:

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

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

    Ну и общие соображения по зависимым спискам в Access:

    Если первый список не связан с полем источника записей формы, то обновление надо ставить в обработчик события BeforeUpdate ("До обновления" в окне свойств конструктора формы в русских версиях Access-а), либо в AfterUpdate.

    Если же первый список связан с полем источника записей формы, то обновление надо ставить в обработчик события Current ("Текущая запись") формы и BeforeUpdate (AfterUpdate) первого списка.

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

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

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

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

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

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

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

    Как связать результат из выпадающего списка с нужной формой?
    В Access я новичок. Я создала форму, на которой пользователь выбирает журнал из выпадающего списка.

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


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

    По первому вопросу, нажмите правой кнопкой мыши на кнопке Поиск сверху и выберите "Открыть в новом окне."
    В появившемся окошке слева ключевые слова: напишите "фильтр на форме" или "фильтр в форме", а справа в списке мышкой выберите MS Access. После чего нажмите на начать поиск. Выбирайте на свой вкус любой фильтр.

    По второму вопросу. Речь идёт о ленточной форме? Если да, то попробуйте это делать в одиночной.

    Решение

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

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