Зависимые поля со списком access

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

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

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

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

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

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

2. Вместо первого поля, включив кнопку «Мастера» на панели элементов Access, сгенерируем список, выводящий вместо кодов названия отделов. Сделать это можно так:

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

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

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

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

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

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

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

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

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

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

Скачать этот пример в архиве ZIP (41 Кб)

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

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

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

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

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

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

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

Читайте также:  Диспетчер телефонов для windows 7

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

В этой статье

Типы списков

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

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

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

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

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

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

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

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

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

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

Выберите инструмент или поле со списком .

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

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

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

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

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

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

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

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

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

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

Читайте также:  Бесплатные программы для прослушивания интернет радио

Нажмите кнопку Далее и введите подпись для элемента управления. Подпись будет отображена рядом с элементом управления.

Нажмите кнопку Готово.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Щелкните полесо списком или поле со списком .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Диабло 3 самоцвет легкости где взять

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Реализую через DLookUp, однако ничего не выводится

В форме из Поля со списком выбирается фио человека (ФИО)

А у вас там случайно не КодФИО, не числовое значение?

И еще, не нравится мне это Попробуйте поменять на Forms.

luna15, сделайте проще и базу лишний раз дергать не придется: — источником поля со списком написать всю таблицу Patient. Ненужным полям задать ширину 0 — в поле ниже написать

На всякий случай: Me переменная класса формы и видна только в модуле формы. В самой форме, не в ее модуле, переменная не видна. Равно как и все другие переменные