Как сделать список в access?

Элемент управления Список

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

Список может состоять из одного или нескольких столбцов, однако при выборе элемента списка в связанное с ним поле таблицы передается только одно значение, например в приведенных на рис. 9.14 списках это «КодТипа» (CategoryID) и «КодСотрудника» (EmployeeID), которые в списках даже не отображаются. Внешний вид списка и его содержимое определяются его свойствами, которые можно задать вручную, а можно воспользоваться мастером при размещении списка в форме, который, запросив нужную информацию, определит большую часть свойств автоматически. Создание списка с помощью мастера уже демонстрировалось в первой части книги. Мастер списков очень похож на Мастера, с помощью которого создаётся элемент Поле со списком (см. разд. «Создание и удаление элементов управления» гл. 5). Для того чтобы список правильно работал, нужно корректно определить его важнейшие свойства — это первые восемь свойств на рис. 9.15. Соответственно, если он работает неправильно, именно эти свойства нужно проверять в первую очередь.

Рис. 9.14. Элементы управления Список

Рис. 9.15. Свойства элемента управления Список

  • Имя (Name) — название данного элемента управления. Нужно дать ему осмысленное название, т. к. оно используется во всех ссылках на этот элемент управления в выражениях, программах и макросах.
  • Данные (Control Source) — название поля в таблице, которое будет содержать выбранное в списке значение.
  • Следующие два свойства: Тип источника строк (Row Source Type) и Источник строк — (Row Source) определяют источник данных для элементов списка. В приведенном примере в качестве источника данных используется таблица «Типы» (Categories), поэтому в свойстве Тип источника строк (Row Source Type) выбрано значение Таблица или запрос (Table/Query), а в качестве значения свойства Источник строк (Row Source) указана инструкция SQL, которая выбирает нужные данные из таблицы (поля «КодТипа» и «Катерогия»): SELECT Типы.КодТипа, Типы.Категория FROM Типы; для английской версии Access: SELECT Categories.CategorylD, Categories.CategoryName FROM Categories;
  • Чтобы элементы в данном списке были отсортированы в алфавитном порядке по полю «Категория», в конец инструкции SQL нужно дабавить предложение: ORDER BY Типы.Категория (ORDER BY Categories.CategoryName).

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

  • Свойство Число столбцов (Column Count) имеет значение 2, т. е. в списке будет два столбца (выбираются два поля), однако свойство Ширина столбцов (Column Width) определяет ширину первого столбца, равной 0, т. е. он не будет отображаться на экране.
  • Несмотря на то, что первый столбец является скрытым, его тоже можно присоединить к полю таблицы, как и любой другой столбец списка, чтобы в выбранном элементе списка значение именно из этого столбца (в нашем примере — это значение поля «КодТипа») записывалось в базовую таблицу формы. Чаще всего именно первый слобец списка требуется присоединить к полю источника данных. Номер присоединенного столбца указывается в свойстве Присоединенный столбец (Bound Column).
  • Свойство Заглавия столбцов (Column Heads) в нашем примере имеет значение Нет (No), поэтому они не будут отображаться в списке.

Кроме рассмотренного, существуют еще три типа источников строк для элемента управления Список (ListBox):

    Список значений. Если количество строк в списке невелико и постоянно, можно все значения задать прямо в окне свойств элемента. В этом случае в свойстве Тип источника строк выбирается значение Список значений (Value List), а значения элементов списка перечисляются через точку с запятой без пробелов в свойстве Источник строк. Например:

Если элементы списка содержат пробелы, включите их в кавычки. Чтобы все дни недели отобразились в одном столбце списка, установите значение свойства Число столбцов равным 1, а свойству Ширина столбцов присвойте любое ненулевое значение, например 2, 5см (2, 5cm).

Если нужно вывести два столбца значений, то в свойстве Источник строк в перечислении значений задаются последовательно пары значений, число столбцов устанавливается равным 2, а в свойстве Ширина столбцов задается пара значении, например 2, 5см; Зсм (2, 5cm; 3cm).

  • Список полей. Этот тип источника строк (значение Список полей (Filed List) свойства Тип источника строк) предназначен для вывода в списке имен полей таблицы или .запроса. Имя таблицы или запроса задается в свойстве Источник строк. Таким способом в списке можно отобразить имена полей таблиц, чтобы предоставить возможность их выбора.
  • Определяемая пользователем функция. Наконец, источником строк для списка может быть функция, написанная на языке VBA, которая заполнит список значениями. В этом случае свойство Тип источника строк нужно установить, как это показано на рис. 9.16, т. е. указать имя функции без знака равенства (=) и без скобок, а свойство Источник строк должно остаться пустым. Использовать определяемую пользователем функцию полезно, когда требуется заполнить список вычисленными значениями или когда содержимое списка должно динамически меняться в зависимости от содержимого других элементов управления. В первом случае вычисления могут проводиться даже над данными, которых нет в базе (например, когда нужно вычислить определенные даты, начиная с текущей) Второй вариант окажется подходящим, например, если при выборе категории товаров в одном списке, в другом должен отображаться набор товаров именно этой категории.
  • Читать еще:  Как сделать главную и подчиненную таблицу в access?

    Рис. 9.16. Использование функции в качестве источника строк

    Несколько слов о третьем типе источника строк списка. Эта функция должна иметь такой список аргументов:

    Function Имя_функции(fid As Control, id As Variant, _

    row As Variant, col As Variant, code As Variant) As Variant

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

    Поясним значения ее аргументов и возвращаемого значения.

    • code — «код действия», определяет, какое действие должна выполнить функция при данном вызове. Это могут быть следующие действия: инициализация списка, его открытие, получение количества строк, количества столбцов, ширины столбцов, самих элементов списка и завершение работы. Всем этим действиям соответствуют зарезервированные константы VBA.
    • fid — ссылка на элемент управления Список или Поле со списком, который заполняется элементами, с помощью данной функции.
    • id — уникальный идентификатор заполняемого элемента управления. Этот аргумент полезен, когда такая функция используется для заполнения нескольких элементов управления, чтобы их различить.
    • row — текущий номер строки для заполняемого элемента списка (начиная с 0).
    • col — текущий номер столбца для заполняемого элемента списка (начиная с 0).
    • Возвращаемое значение и его тип зависят от текущего «кода действия», переданного в функцию. Например, для кода acLBGetValue (получить данные) это должно быть строковое значение элемента списка в заданной строке row и столбце col.

    Все значения аргументов формируются и передаются в функцию самим Access. Разработчику только остается их обработать.

    О создании функции, выполняющей роль источника данных для списка или поля со списком, можно получить подробную информацию в справочной системе Access 2002, в разд. «Справка по Microsoft Access, Программирование на Visual Basic, Справочник по Visual Basic для Microsoft Access, Свойства, Q-R, RowSourceType» (Microsoft Access Help, Programming in Visual Basic, Microsoft Access Visual Basic Reference, Properties, Q-R, RowSourceType Property). Пример использования такой функции можно найти также на компакт-диске, являющемся дополнительным приложением к данной книге, который продается отдельно.

    Свойство Присоединенный столбец (Bound Column), определяющее тот столбец списка, значение которого при выборе становится значением элемента управления, может иметь значение 0. В этом случае значением элемента Список (List Box) станет индекс (номер) выбранного элемента в списке.

    Элемент управления Список интересен еще и тем, что он позволяет делать множественный выбор в списке, т. е. в нем можно выбрать одновременно несколько элементов, чего не позволяет делать элемент Поле со списком (Combo Box). Такая возможность требуется довольно часто, когда задаются критерии отбора записей. Например, в базе данных объектов недвижимости надо найти интересующие клиента квартиры, а его интересуют квартиры в определенных районах города. Можно, конечно, выбирать в списке по очереди сначала один район, чтобы выбрать все квартиры в данном районе, потом другой и т. д. Однако удобнее в этом случае использовать для указания интересующих районов список, в котором выбираются сразу все интересующие районы, а потом формируется соответствующий запрос к базе данных.

    Определить, как пользователь будет выбирать значения из списка, можно с помощью свойства Несвязное выделение (Multi Select). Его можно найти на вкладке Другие (Other) окна свойств. По умолчанию это свойство имеет значение Отсутствует (None). В этом случае разрешается ныбор только одного элемента из списка. Но это свойство может иметь значения Простой (Simple) и Со связным выбором (Extended). В первом случае разрешается множественный выбор просто щелчком мыши по нужным элементам, а во втором список работает так, как почти все списки в Windows, т. е. можно использовать клавиши и для выделения смежных и несмежных элементов. Результаты выбора хранятся в специальном массиве и могут быть использованы программами VBA.

    Поле со списком access

    Поле со списком access – составной элемент управления, объединяющий поле и раскрывающийся список, позволяющий не только выбирать (как в простом списке), но и вводить значения.

    Читать еще:  Как сделать формы в access?

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

    Открывается список нажатием на кнопке
    (в правом углу элемента управления «Поле со списком access») или клавишами Alt+«стрелка вниз». При помощи простого макроса можно сделать так, чтобы поле со списком раскрывалось само при входе в него.

    Чтобы ввести значение в поле со списком access, можно начать вводить значение в поле с клавиатуры или выбрать нужное значение в выпадающем списке. При вводе значений с клавиатуры помогает свойство «Автоподстановка». Если установить его как «да», то при вводе информации Access автоматически будет предлагать значения из списка, выделяя буквы предлагаемого значения после последнего введённого символа.

    Обилие всяких кнопочек и настроек может постоянно сбивать вас с толку. Также может появиться страх при первом открытии программы.

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

    Например, слово «детектив» в поле «литературный жанр» можно написать «детиктив» или «дитиктив», или ещё как-нибудь (неважно, опечатка это или следствие неграмотности оператора. Любой человек может ошибаться и даже имеет на это право).

    Поле, содержащее такие значения, уже нельзя правильно ни отсортировать, ни использовать в запросе. Мы зададим запрос с фильтром Like «детектив» и запрос найдёт нам, предположим, 120 книг этого жанра. Но вследствие неправильного ввода информации запрос «не увидел», к примеру, 8 книг.

    Такая ситуация просто недопустима. Гораздо проще один раз и в одном месте (в базовой таблице подстановки) правильно ввести название жанра и связать эту запись с полем подстановки в таблице поставок книг отношением «один-ко-многим» (можно и не связывать. Но этот вопрос не представляется возможным обсудить в пределах одной статьи, так как слишком много завязано вопросов с типами полей, связями и др.).

    Другой вопрос состоит в том, стоит ли разрешать оператору добавлять новые значения в базовую таблицу подстановки (со стороны «один»). Всё зависит от конкретных задач и типа информации. Не всегда можно предугадать все возможные варианты для значений поля подстановки. Например, поле подстановки для указания пола сотрудника может принимать два значения: «мужской» и «женский». А вот попробуйте создать поле подстановки мужских или женских имён (например, мужские имена: Андрей, Андриан, Андрон, Анджей и т. д.; женские имена: Наталья, Наталия, Наталея, Натали и т. д.).

    Аксесс довольно сложная программа. Это подтверждает тот факт, что в интернете можно найти массу информации по ней. Однако, вы знаете что на самом деле достаточно знать лишь 20% инструментов, чтобы создавать и настраивать 80% баз данных в программе?

    Во-первых, некоторые родители дают такие имена, которых не было раньше в природе (а это имя ещё надо ввести в базовую таблицу подстановки).

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

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

    К тому же оно чаще всего используется в инициалах. Например, я ввёл значение «Иванов Андриан Иванович», хотя имя человека «Андрей». В поле «ФИО» получим «Иванов А. И.». Вроде как и ошибки нет.)

    Создаётся поле со списком access, как правило, в режиме конструктора объекта базы данных:

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

    — в формах — при помощи кнопки «Поле со списком» на панели элементов. Если создаём новое поле со списком из базового поля со списком в таблице, то можно просто перенести это поле на форму (отчёт) из окошка «Список полей». Все базовые свойства будут унаследованы новым элементом управления.

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

    Читать еще:  Как сделать диапазон в access?

    В приведённом ниже примере при выборе города в поле со списком автоматически загружаются в подчинённую форму записи, относящиеся к этому городу (т. е. мы видим, кто стоит на учёте в г. Щёлково).

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

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

    forms![ИмяФормы]'[Имя поля со списком].[Column](x). Например: forms![Типы]![НазваниеТипа].[Column](1)

    х – номер столбца. Столбцы начинают нумерацию с нуля.

    При вычислении номера видимого столбца надо принимать в расчет и невидимые столбцы.

    Как сделать список в 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) первого списка.

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

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

    Ссылка на основную публикацию
    Adblock
    detector