Использование параметрических полей со списками в проектах Access

Переводы статьи Переводы статьи
Код статьи: 281870 - Vizualiza?i produsele pentru care se aplic? acest articol.
Данная статья была ранее опубликована под номером RU281870
Материал, изложенный в данной статье, требует наличия базовых знаний об использовании макросов и программировании.

Данная статья применима только к проектам Microsoft Access (ADP).

Развернуть все | Свернуть все

В этой статье

Аннотация

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

В данной статье рассматривается пример добавления поля со списком в форму «Customers» в учебном проекте «Борей» (NorthwindCS.adp). Поле со списком содержит список заказов, сделанных данным клиентом. При выборе заказа открывается форма «Orders», содержащая сведения об отмеченном заказе.

Существуют четыре способа создания списка заказов, сделанных данным клиентом. Эти способы используют в качестве источника данных проект Access (ADP) на сервере SQL Server 2000. В следующем разделе дано описание всех четырех способов.

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

Создание поля со списком

В форме «Orders» поле со списком, содержащее список заказов данного клиента, можно создать следующим образом.
  1. Откройте форму «Customers» в режиме конструктора.
  2. На панели инструментов щелкните Control Wizards и добавьте в форму поле со списком.
  3. На первой странице мастера задайте выбор значений из таблицы или запроса и нажмите кнопку Далее.
  4. На второй странице мастера выберите таблицу «Orders» и нажмите кнопку Далее.
  5. На третьей странице мастера добавьте в поле со списком поля OrderID, CustomerID и OrderDate и нажмите кнопку Далее.
  6. На четвертой странице мастера снимите флажок Hide Key Column и сожмите колонку CustomerID так, чтобы она стала невидимой. Нажмите кнопку Далее.
  7. На пятой странице мастера снова нажмите кнопку Далее, чтобы подтвердить выбор поля OrderID для хранения и использования в базе данных.
  8. На шестой странице мастера выберите вариант «Запомнить значение для дальнейшего использования» и нажмите кнопку Далее.
  9. На последней странице мастера введите для поля со списком название Select Order и нажмите кнопку Готово.
  10. Откройте страничку свойств поля со списком и измените имя поля на SelectOrderCombo.
  11. Задайте в свойстве OnClick следующую процедуру обработки события:
    Private Sub SelectOrderCombo_Click()
    On Error GoTo Err_SelectOrderCombo_Click
        Dim stDocName As String
        Dim stLinkCriteria As String
    
        stDocName = "Orders"
    
        stLinkCriteria = "[OrderID]=" & Me![SelectOrderCombo]
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    
    Exit_SelectOrderCombo_Click:
        Exit Sub
    
    Err_SelectOrderCombo_Click:
        MsgBox Err.Description
        Resume Exit_SelectOrderCombo_Click
    
    End Sub
    					

Добавление кода, обновляющего поле со списком

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

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

Примечание. Поскольку CustomerID — это текстовое поле, ссылка на заказы должна быть окружена одинарными кавычками ('). Например, порожденная инструкция WHERE преобразуется из
WHERE CustomerID = '" & Forms![Customers]![CustomerID] & "'"
				
в
WHERE CustomerID = 'ALFKI'
				

Способ 1. Выбор с помощью Ad Hoc Select

Задайте в свойстве OnEnter следующую процедуру обработки события:
Me.SelectOrderCombo.RowSource = "SELECT TOP 100 PERCENT OrderID, CustomerID, OrderDate FROM Orders WHERE " _
     & "CustomerID = '" & Forms![Customers]![CustomerID] & "' ORDER BY OrderDate DESC"

				

Способ 2. Режим сервера SQL

  1. Создайте в режиме конструктора новое представление и выберите из таблицы заказов поля OrderID, CustomerID и OrderDate. Для сортировки заказов от свежих к старым установите для поля OrderDate параметр Sort TypeDescending.
  2. Сохраните представление под названием vwCustomerOrders.
  3. Задайте в свойстве OnEnter поля со списком следующую процедуру обработки события:
    Me.SelectOrderCombo.RowSource = "SELECT * FROM vwCustomerOrders WHERE CustomerId = '" & Forms![Customers]![CustomerID] & "'"
    					
В способах 3 и 4 функция Requery поля со списком вызывается при наступлении события OnEnter для повторного запуска сохраненной процедуры или запроса SQL и получения нужных результатов. В приведенных примерах Parameter определен как элемент управления формой, использующий в критерии @ControlName. Access автоматически применяет критерий и запрашивает нужные записи.

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

Способ 3. Использование сохраненной процедуры SQL

  1. Выберите новую процедуру в графическом конструкторе.
  2. Выберите таблицу Orders и добавьте к сохраненной процедуре поля OrderID, CustomerID и OrderDate.
  3. Введите @CustomerID в качестве критерия для поля CustomerID и задайте для поля OrderDate сортировку по убыванию.
  4. Сохраните процедуру под названием spCustomerOrders и закройте ее.
  5. Выберите процедуру spCustomerOrders в качетсве исходной строки для поля со списком.

    Примечание. Конструктор сохраненной процедуры создает и сохраняет следующий текст на языке SQL:
    CREATE PROCEDURE dbo.spCustomerOrders
      (@CustomerID varchar(5))
      AS SELECT OrderID, CustomerID, OrderDate
      FROM   dbo.Orders
      WHERE  (CustomerID = @CustomerID)
      ORDER BY OrderDate DESC
    					
  6. Задайте в свойстве OnEnter поля со списком следующую процедуру обработки события:
    Me.SelectOrderCombo.Requery
    					

Способ 4. Использование функций SQL Server 2000

Этот способ применим только в том случае, если источником данных для проекта Access служит сервер SQL Server 2000 или более поздней версии.
  1. Создайте новую функци.в графическом конструкторе.
  2. Выберите таблицу Orders и добавьте к сохраненной процедуре поля OrderID, CustomerID и OrderDate.
  3. Введите @CustomerID в качестве критерия для поля CustomerID и задайте для поля OrderDate сортировку по убыванию.
  4. Сохраните процедуру под названием fnCustomerOrders и закройте ее.
  5. Выберите процедуру fnCustomerOrders в качетсве исходной строки для поля со списком.

    Примечание. Конструктор сохраненной процедуры создает и сохраняет следующий текст на языке SQL:
    CREATE FUNCTION dbo.fnCustomerOrders
      (@CustomerID varchar(5))
      RETURNS TABLE
      RETURN ( SELECT TOP 100 PERCENT OrderID, CustomerID, OrderDate
      FROM   dbo.Orders
      WHERE  (CustomerID = @CustomerID)
      ORDER BY OrderDate DESC )
    					
  6. Задайте в свойстве OnEnter поля со списком следующую процедуру обработки события:
    Me.SelectOrderCombo.Requery
    					
Для проверки описанных способов откройте форму и выберите пункт из поля со списком «Select Order». Событие OnEnter приведет к повторному исполнению запроса, соответствующего полю, и автоматически породит список заказов, сделанных данным клиентом. При выборе заказа происходит событие OnClick и открывается форма Orders, содержащая сведения об отмеченном заказе.

Свойства

Код статьи: 281870 - Последний отзыв: 12 октября 2004 г. - Revision: 1.0
Информация в данной статье применима к:
  • Microsoft Access 2002 Standard Edition
Ключевые слова: 
kbhowto kbprogramming kbclientserver kbadp KB281870

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com