Форма или отчет, к которому привязан хранимой процедуры или функции не применяется условие WHERE


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


Эта статья касается только в проекте Microsoft Access (.adp).


Симптомы


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

Решение


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

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

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

  1. Открытие образца проекта Access NorthwindCS.adp.
  2. В окне базы данных выберите таблицу типы и выберите в меню Вставка выберите команду Автоформа .

    Примечание. При использовании Access 2007, выделите в таблице категорий в окне базы данных и нажмите кнопку формы в группе формы на вкладке Создать .
  3. Откройте форму в режиме конструктора.
  4. Удалить объект подчиненной формы под названием Table.Products из основной формы, а затем добавить кнопку в форму. Если запускается мастер, нажмите кнопку Отмена.
  5. Задайте следующие свойства для кнопки.

    Name: cmdFilterProducts
    Caption: Filter Products
    On Click: [Event Procedure]
  6. Значение свойства OnClick кнопки следующую процедуру обработки события:
    Private Sub cmdFilterProducts_Click()
    DoCmd.OpenForm "Products", acNormal, , , acFormEdit, acWindowNormal
    End Sub
  7. В меню файл выберите команду Закрыть и вернуться в Microsoft Access.
  8. В меню файл выберите команду Сохранитьи сохраните форму с именем Categories1.

    Примечание. На панели Быстрого доступа нажмите кнопку Сохранить.
  9. В окне базы данных выберите запросыи нажмите кнопку Создать.

    Примечание. При использовании Access 2007 щелкните Мастер запросов в группу на вкладке Создать .
  10. В диалоговом окне Новый запрос выберите Ввод сохраненной процедурыи нажмите кнопку ОК.
  11. Введите или вставьте следующую инструкцию Transact-SQL, закройте и сохраните процедуру с именем по умолчанию spProducts.
    CREATE PROCEDURE spProducts
    @CatID int
    AS
    SELECT * FROM Products WHERE CategoryID = @CatID
    RETURN
  12. Откройте форму продуктов в режиме конструктора и измените свойство Источник записей продуктов spProducts.
  13. Прокрутите список вниз до свойства InputParameters формы, а затем присвоить этому свойству значение следующего:
    @CatID int = форм! [Categories1]! [КодТипа]
  14. Закройте и сохраните форму продуктов и откройте форму Categories1.
  15. Обзор CategoryName Кондитерские изделия, а затем нажмите кнопку Фильтр продуктов . Обратите внимание, что форма продуктов открывает и отображает только те продукты, где категории равен Кондитерские изделия.

Статус


Данное поведение является особенностью.

Дополнительные сведения


Часто доступа пользователей требуется ограничить число записей, отображаемых на форму или отчет. Один способ сделать это — фильтрация записей в форме (или отчет) с помощью условия WHERE и с помощью аналогичного объекта в условное значение. Например одна форма может отображать условное значение, которое будет использоваться для ограничения числа отображаемых записей в другой форме. Тем не менее если в качестве источника записей формы, вы пытаетесь фильтр имеет хранимую процедуру или функцию, фильтр игнорируется. Следующие шаги иллюстрируют это поведение.

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

Действия для воспроизведения поведения в 2003 доступ

  1. Выполните шаги 1-5 из раздела «Решение» ранее в этой статье.
  2. Значение свойства OnClick кнопки следующую процедуру обработки события:
    Private Sub cmdFilterProducts_Click()
    DoCmd.OpenForm "Products", acNormal, , "[CategoryID] = " & Me!CategoryID, acFormEdit, acWindowNormal
    End Sub
  3. В меню файл выберите команду Закрыть и вернуться в Microsoft Access.
  4. В меню файл выберите команду Сохранитьи сохраните форму как Categories1.
  5. Откройте форму в режиме формы.
  6. Обзор CategoryName Кондитерские изделия, а затем нажмите кнопку Фильтр продуктов . Обратите внимание, что форма продуктов открывает и отображает только те продукты, где категории равен Кондитерские изделия.
  7. Закрыть продукты и Categories1 форм.
  8. В окне базы данных выберите запросыи нажмите кнопку Создать. Нажмите кнопку Ввод сохраненной процедурыи нажмите кнопку ОК.
  9. Введите или вставьте следующую инструкцию Transact-SQL, закройте и сохраните процедуру с именем по умолчанию spProducts.
    CREATE PROCEDURE spProducts
    AS
    SELECT * FROM Products
    RETURN
  10. Откройте форму продуктов в режиме конструктора и измените свойства RecordSource продуктов spProducts.
  11. Закройте и сохраните форму продуктов и откройте форму Categories1.
  12. Обзор CategoryName Кондитерские изделия, а затем нажмите кнопку Фильтр продуктов . Обратите внимание, что форма продуктов открывает и отображает все продукты, а не только те продукты в категории Кондитерские изделия.