Formulário ou relatório que está vinculado a um procedimento armazenado ou uma função não se aplica a condição WHERE

Moderado: Requer a macro básica, codificação e interoperabilidade habilidades.


Este artigo se aplica somente a um projeto do Microsoft Access (. adp).


Sintomas

Quando você tentar filtrar um relatório ou um formulário do Access, usando um valor que é exibido em outro objeto, como outra forma de acesso, o filtro não é aplicado.

Resolução

Há vários métodos que poderia ser usada para resolver a incapacidade de um formulário ou um relatório que é vinculado a um procedimento armazenado ou uma função de filtro. A maioria das seguintes resoluções envolve substituindo a função ou o procedimento armazenado com algum outro tipo de fonte de registro, como uma tabela, um modo de exibição ou uma instrução SQL.

No entanto, a resolução a seguir mostra como você pode continuar a usar um procedimento armazenado como origem do registro de um formulário ao implementar com êxito um filtro ou condição WHERE.

Cuidado: se você seguir as etapas neste exemplo, modifique o projeto do Access de exemplo NorthwindCS. adp. Convém fazer backup do arquivo NorthwindCS. adp e seguir essas etapas numa cópia do projeto.

  1. Abra o projeto de exemplo NorthwindCS. adp.

  2. Na janela banco de dados, clique para realçar a tabela Categorias e, em seguida, no menu Inserir , clique em AutoFormulário .

    Observação: Se você usar o Access 2007, clique para realçar a tabela categorias na janela banco de dados e, em seguida, clique em formulário no grupo de formulários na guia criar .

  3. Abra o formulário no modo Design.

  4. Excluir o objeto de subformulário é rotulado como Table.Products do formulário principal e, em seguida, adicione um botão de comando ao formulário. Se o assistente for iniciado, clique em Cancelar.

  5. Defina as seguintes propriedades do botão de comando:
    Name: cmdFilterProducts
    Caption: Filter Products
    On Click: [Event Procedure]

  6. Defina a propriedade OnClick do botão de comando para o seguinte procedimento de evento:

    Private Sub cmdFilterProducts_Click()
    DoCmd.OpenForm "Products", acNormal, , , acFormEdit, acWindowNormal
    End Sub
  7. No menu arquivo , clique em Fechar e voltar para Microsoft Access.

  8. No menu arquivo , clique em Salvare salve o formulário como Categories1.

    Observação: Na barra de ferramentas de Acesso rápido , clique em Salvar.

  9. Na janela banco de dados, clique em consultase, em seguida, clique em novo.

    Observação: Se você usar o Access 2007, clique em Assistente de consultado grupo na guia criar .

  10. Na caixa de diálogo Nova consulta , clique em Criar texto de Stored Proceduree, em seguida, clique em Okey.

  11. Digite ou cole a seguinte instrução Transact-SQL e feche e salve o procedimento com o nome padrão de spProducts:

    CREATE PROCEDURE spProducts
    @CatID int
    AS
    SELECT * FROM Products WHERE CategoryID = @CatID
    RETURN
  12. Abra o formulário produtos no modo estrutura e altere a propriedade Origem do registro de produtos para spProducts.

  13. Role para baixo até a propriedade ParâmetrosDeEntrada do formulário e, em seguida, atribuir o seguinte valor para esta propriedade:

    Int @CatID = formulários! [Categories1]! [CódigoDaCategoria]

  14. Feche e salve o formulário produtos e, em seguida, abra o formulário Categories1.

  15. Navegue até o NomeDaCategoria docese, em seguida, clique no botão Filtro produtos . Observe que o formulário Products é aberta e exibe apenas os produtos onde a categoria é igual a doces.

Status

Esse comportamento é pré-definido.

Mais informações

Geralmente, um usuário de acesso deseja limitar o número de registros exibidos em um formulário do Access ou um relatório. Um método para fazer isso é para filtrar os registros no formulário (ou relatório) com uma condição WHERE e usar algum outro objeto para fornecer o valor condicional. Por exemplo, um formulário pode exibir um valor condicional que será usado pelo outro formulário para limitar o número de registros a ser exibido. No entanto, se o formulário que você está tentando filtrar tem um procedimento armazenado ou uma função como fonte de registro, o filtro será ignorado. As etapas a seguir ilustram esse comportamento.

Cuidado: se você seguir as etapas neste exemplo, modifique o projeto do Access de exemplo NorthwindCS. adp. Convém fazer backup do arquivo NorthwindCS. adp e seguir essas etapas numa cópia do projeto.

Etapas para reproduzir o comportamento no acesso 2003

  1. Siga as etapas 1 a 5 da seção "Resolução" deste artigo.

  2. Defina a propriedade OnClick do botão de comando para o seguinte procedimento de evento:

    Private Sub cmdFilterProducts_Click()
    DoCmd.OpenForm "Products", acNormal, , "[CategoryID] = " & Me!CategoryID, acFormEdit, acWindowNormal
    End Sub
  3. No menu arquivo , clique em Fechar e voltar para Microsoft Access.

  4. No menu arquivo , clique em Salvare salve o formulário como Categories1.

  5. Abra o formulário no modo formulário.

  6. Navegue até o NomeDaCategoria docese, em seguida, clique no botão Filtro produtos . Observe que o formulário produtos abre e exibe apenas os produtos onde a categoria é igual a doces.

  7. Feche os produtos e o Categories1 formulários.

  8. Na janela banco de dados, clique em consultase, em seguida, clique em novo. Clique em Criar texto de Stored Proceduree, em seguida, clique em Okey.

  9. Digite ou cole a seguinte instrução Transact-SQL e feche e salve o procedimento com o nome padrão de spProducts:

    CREATE PROCEDURE spProducts
    AS
    SELECT * FROM Products
    RETURN
  10. Abra o formulário produtos no modo estrutura e altere a propriedade RecordSource de produtos para spProducts.

  11. Feche e salve o formulário produtos e, em seguida, abra o formulário Categories1.

  12. Navegue até o NomeDaCategoria docese, em seguida, clique no botão Filtro produtos . Observe que o formulário Products é aberta e exibe todos os produtos em vez de apenas os produtos na categoria doces.

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Estas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×