Переход к определенной записи из поля со списком в Microsoft Access

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

Эта статья применима к файлам баз данных Microsoft Access (.mdb) или (.accdb).

Сводка

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

  • В поле со списком события AfterUpdate выполните код, использующий метод FindFirst.
  • В событии AfterUpdate поля со списком вызовите макрос, который запросит свойство Filter формы.
  • Используйте форму или подчиненную форму с полем со списком в форме main и данными в подчиненной форме, привязанными свойствами LinkMasterFields и LinkChildFields элемента управления подчиненной формы.
  • Создайте форму на основе запроса, который объединяет две таблицы, а затем используйте метод автозапуска, чтобы привязать поле со списком к полю, управляющее соединением.

Эти четыре метода описаны в разделе "Дополнительные сведения" этой статьи и основаны на образце базы данных Northwind.

Дополнительная информация

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

Предостережение

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

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

Метод 1 2 3 4
Не требуется код или макросы x
Подчиненная форма не требуется x x
Может прокручиваться до других записей x x
Запрос не требуется x x x x
Может изменять записи x x x x
Открывает форму в других режимах x

Примечание.

Эти методы также могут применяться к текстовым полям.

Способ 1

  1. Создайте таблицу с именем Products с полями ProductID и ProductName.

  2. С помощью мастера автоформ: columnar создайте новую форму на основе таблицы Products, а затем сохраните форму как frmComboTest.

    Для этого в Microsoft Office Access 2003 и более ранних версиях Access выполните следующие действия.

    1. В окне База данных щелкните Формы в разделе Объекты.
    2. Нажмите кнопку Создать на панели инструментов окна базы данных.
    3. В диалоговом окне Создать форму щелкните AutoForm: Columnar, выберите таблицу Products в раскрывающемся списке и нажмите кнопку ОК.
    4. Сохраните форму как frmComboTest.

    Для этого в Microsoft Office Access 2007 или более поздней версии выполните следующие действия.

    1. На вкладке Создать щелкните Мастер форм в группе Формы .
    2. В диалоговом окне Из мастера выберите таблицу Продукты в раскрывающемся списке.
    3. Выберите поля, которые нужно просмотреть в новой форме, и нажмите кнопку Далее.
    4. Выберите параметр Columnar , чтобы задать макет формы, а затем нажмите кнопку Далее.
    5. Введите frmComboTest в качестве заголовка формы и нажмите кнопку Готово.
  3. Используйте мастер полей со списком , чтобы добавить поле со списком без привязки. Для этого выполните следующие действия:

    1. Откройте форму frmComboTest в режиме конструктора.
    2. На панели инструментов убедитесь, что выбран пункт Мастеры управления .

    Примечание.

    В Access 2007 или более поздней версии убедитесь, что в группе Элементы управления на вкладке Конструктор выбран параметр Использовать мастеры управления.

    1. Создайте поле со списком в форме frmComboTest.

    Примечание.

    В Access 2007 или более поздней версии щелкните Поле со списком в группе Элементы управления на вкладке Конструктор , а затем щелкните форму frmComboTest. В диалоговом окне Выбор построителя щелкните Мастер полей со списком и нажмите кнопку ОК.

    1. В диалоговом окне Мастер полей со списком выберите параметр Найти запись в форме на основе значения, выбранного в поле со списком , а затем нажмите кнопку Далее.
    2. Выберите поля ProductID и ProductName и нажмите кнопку Далее.
    3. Нажмите кнопку Готово.

    Мастер со списком создает процедуру события, аналогичную следующей:

    Private Sub Combo0_AfterUpdate()
         ' Find the record that matches the control.
         Dim rs As Object
    
     Set rs = Me.Recordset.Clone
         rs.FindFirst "[ProductID] = " & Str(Nz(Me![Combo20], 0))
         If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub
    
  4. Просмотрите форму frmComboTest в представлении Формы.

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

Способ 2

  1. Создайте новую форму на основе таблицы Products с помощью мастера autoForm: Columnar , как описано на шаге 2 метода 1, а затем сохраните форму как frmComboTest2.

  2. На странице "Лист свойств" формы frmComboTest2 задайте для свойства Фильтр на вкладке Данные значение [ProductName] = Forms![frmComboTest2]![cboLookup].

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

    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Select [ProductName] from Products;
    BoundColumn: 1
    ColumnWidths: 1"
    AfterUpdate: mcrLocateProduct
    
  4. Создайте следующий макрос с именем mcrLocateProduct:

    Action
    --------------------------------------
    SetValue
    Requery
    
    mcrLocateProduct Actions
    --------------------------------------
    SetValue
    Item: Forms![frmComboTest2].FilterOn
    Expression: True
    

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

Способ 3

  1. Создайте новую форму на основе таблицы Products с помощью мастера autoForm: Columnar , как описано на шаге 2 метода 1, а затем сохраните форму как frmSub.

  2. На странице Страница свойств формы frmSub задайте для свойства Представление по умолчанию на вкладке Форматзначение Одна форма.

  3. Создайте новую форму (которая не основана ни на одной таблице или запросе) и сохраните ее как frmMain. Затем добавьте поле со списком и задайте его свойства следующим образом:

    Combo Box
    ----------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Products
    ColumnCount: 4
    ColumnWidths: 0";2"
    BoundColumn: 1
    
  4. Вставьте элемент управления Подчиненная форма формы frmSub.

    • Перейдите в раздел Конструктор>подчиненной формы или подчиненного отчета, а затем отмените мастер субформ.
    • Перетащите frmSub из области навигации в форму frmMain.
  5. Задайте свойства элемента управления подчиненной формы следующим образом:

    Subform
    ----------------------------
    LinkChildFields: [ProductID]
    LinkMasterFields: cboLookup
    

    Изменяя значение в элементе управления cboLookup, Access гарантирует, что записи в подчиненной форме соответствуют поле со списком.

    Этот метод показан в форме Orders в образце базы данных Northwind. Подчиненная форма "Сведения о заказе" связана свойствами LinkMasterFields и LinkChildFields .

Метод 4. Использование макрокоманды OpenForm с предложением WHERE

  1. Создайте новую форму на основе таблицы Products с помощью мастера автоформы: columnar , как описано на шаге 2 метода 1, а затем сохраните форму как frmComboTest5.

  2. Добавьте поле со списком без привязки cboLookup, а затем задайте свойства элемента управления следующим образом:

    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: SELECT [ProductID], [ProductName] FROM Products ORDER BY [ProductName];
    BoundColumn: 1
    ColumnCount: 2
    ColumnWidths: 0";1"
    
  3. В построителе макросов создайте внедренный макрос в событии AfterUpdate для поля со списком cboLookup.

  4. В раскрывающемся списке Добавить новое действие выберите OpenForm и задайте следующие свойства:

    Form Name:   frmComboTest5
    View:        Form
    Filter Name: <leave as empty>
    Where Condition: [ID] = [Forms]![frmComboTest5]![cboLookup].value
    Data Mode: <optional>
    Window Mode: <optional>
    
  5. Сохраните и закройте макрос.

  6. Сохраните и запустите форму.

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