Como mover para um registo específico a partir de uma seleção da Caixa de Combinação no Microsoft Access

Moderado: requer competências básicas de macro, codificação e interoperabilidade.

Este artigo aplica-se a um ficheiro de base de dados do Microsoft Access (.mdb) ou a um ficheiro de base de dados do Microsoft Access (.accdb).

Resumo

Este artigo mostra-lhe quatro métodos de mover para um registo específico com base na seleção a partir de uma caixa de combinação. Os métodos são os seguintes:

  • No evento AfterUpdate de uma caixa de combinação, execute o código que utiliza o método FindFirst.
  • No evento AfterUpdate de uma caixa de combinação, chame uma macro que requer a propriedade Filter de um formulário.
  • Utilize um Formulário/Subformulário, com uma caixa de combinação no formulário principal e os dados no subformulário, vinculados pelas propriedades LinkMasterFields e LinkChildFields do controlo de subformulário.
  • Basee o formulário numa consulta que associa duas tabelas e, em seguida, utilize a técnica de pesquisa automática para vincular uma caixa de combinação ao campo que controla a associação.

Estes quatro métodos estão descritos na secção "Mais Informações" deste artigo e baseiam-se na base de dados de exemplo da Northwind.

Mais informações

A Microsoft fornece exemplos de programação apenas a título informativo, sem qualquer garantia expressa ou implícita, incluindo, sem limitações, as garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que o utilizador está familiarizado com a linguagem de programação demonstrada e as ferramentas utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às suas necessidades específicas.

Atenção

Se seguir os passos neste exemplo, modifique a base de dados de exemplo Northwind.mdb. Poderá querer fazer uma cópia de segurança do ficheiro Northwind.mdb e seguir estes passos numa cópia da base de dados.

A tabela seguinte compara as funcionalidades (benefícios e desvantagens) dos quatro métodos:

Método 1 2 3 4
Não requer código/macros x
O subformulário não é necessário x x
Pode deslocar-se para outros registos x x
Não requer uma consulta x x x x
Pode editar registos x x x x
Abre o formulário noutros modos x

Nota

Estes métodos também podem ser aplicados a caixas de texto.

Método 1:

  1. Crie uma tabela com o nome Produtos que tenha o campo IDDoProduto e o campo ProductName.

  2. Utilize o Assistente de Formatação Automática: Colunas para criar um novo formulário baseado na tabela Produtos e, em seguida, guarde o formulário como frmComboTest.

    Para o fazer no Microsoft Office Access 2003 e versões anteriores do Access, siga estes passos:

    1. Na janela Base de Dados , clique em Formulários em Objetos.
    2. Clique em Novo na barra de ferramentas da janela Base de Dados.
    3. Na caixa de diálogo Novo Formulário , clique em Formatar Automaticamente: Coluna, selecione a tabela Produtos na lista pendente e, em seguida, clique em OK.
    4. Guarde o formulário como frmComboTest.

    Para o fazer no Microsoft Office Access 2007 ou numa versão posterior, siga estes passos:

    1. No separador Criar , clique em Assistente de Formulários no grupo Formulários .
    2. Na caixa de diálogo Do Assistente , selecione a tabela Produtos na lista pendente.
    3. Selecione os campos que pretende ver no novo formulário e, em seguida, clique em Seguinte.
    4. Selecione a opção Coluna para definir o esquema do formulário e, em seguida, clique em Seguinte.
    5. Escreva frmComboTest como o título do formulário e, em seguida, clique em Concluir.
  3. Utilize o Assistente de Caixas de Combinação para adicionar uma caixa de combinação desvinculada. Para tal, siga estes passos:

    1. Abra o formulário frmComboTest na vista Estrutura.
    2. Na barra de ferramentas, certifique-se de que a opção Assistentes de Controlo está selecionada.

    Nota

    No Access 2007 ou numa versão posterior, certifique-se de que a opção Utilizar Assistentes de Controlo está selecionada no grupo Controlos no separador Estrutura .

    1. Crie uma caixa de combinação no formulário frmComboTest.

    Nota

    No Access 2007 ou numa versão posterior, clique em Caixa de Combinação no grupo Controlos no separador Estrutura e, em seguida, clique no formulário frmComboTest. Na caixa de diálogo Escolher Construtor , clique em Assistente de Caixas de Combinação e, em seguida, clique em OK.

    1. Na caixa de diálogo Assistente de Caixas de Combinação , selecione a opção Localizar um registo no meu formulário com base no valor que selecionei na minha caixa de combinação e, em seguida, clique em Seguinte.
    2. Selecione os campos ProductID e ProductName e, em seguida, clique em Seguinte.
    3. Clique em Concluir.

    O Assistente de Caixas de Combinação cria um procedimento de evento semelhante ao seguinte:

    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. Veja o formulário frmComboTest na vista Formulário.

    Repare que quando escolhe um nome de produto na caixa de combinação, é movido para o registo do produto que selecionou.

Método 2:

  1. Crie um novo formulário com base na tabela Produtos com o Assistente formatação automática: Colunas conforme indicado no passo 2 do método 1 e, em seguida, guarde o formulário como frmComboTest2.

  2. Na página Folha de Propriedades do formulário frmComboTest2, defina a propriedade Filtro no separador Dados como [ProductName] = Forms![frmComboTest2]![cboLookup].

  3. Adicione uma caixa de combinação não vinculada denominada cboLookup e, em seguida, defina as propriedades do controlo da seguinte forma:

    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Select [ProductName] from Products;
    BoundColumn: 1
    ColumnWidths: 1"
    AfterUpdate: mcrLocateProduct
    
  4. Crie a seguinte macro com o nome mcrLocateProduct:

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

    Repare que quando abre o formulário frmComboTest2 e seleciona um nome de produto na caixa de combinação cboLookup, o filtro é definido para esse valor.

Método 3:

  1. Crie um novo formulário com base na tabela Produtos ao utilizar o Assistente formatação automática: colunar conforme indicado no passo 2 do método 1 e, em seguida, guarde o formulário como frmSub.

  2. Na página Folha de Propriedades do formulário frmSub, defina a propriedade Vista Predefinida no separador Formatar como Formulário Único.

  3. Crie um novo formulário (que não se baseie em nenhuma tabela ou consulta) e guarde-o como frmMain. Em seguida, adicione uma caixa de combinação e defina as respetivas propriedades da seguinte forma:

    Combo Box
    ----------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Products
    ColumnCount: 4
    ColumnWidths: 0";2"
    BoundColumn: 1
    
  4. Insira um controlo Subformulário do formulário frmSub.

    • Aceda a>Subformulário/Sub-relatório de Estrutura e, em seguida, cancele o Assistente de Subformulários.
    • Arraste e largue o frmSub do painel de navegação para o formulário frmMain.
  5. Defina as propriedades de controlo do subformulário da seguinte forma:

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

    Ao alterar o valor no controlo cboLookup, o Access garante que os registos no subformulário correspondem à caixa de combinação.

    O formulário Encomendas na base de dados de exemplo northwind ilustra este método. O subformulário Detalhes da Encomenda está relacionado com as propriedades LinkMasterFields e LinkChildFields .

Método 4: Utilizar a ação de macro AbrirFormulário com a cláusula WHERE

  1. Crie um novo formulário com base na tabela Produtos com o Assistente formatação automática: Colunas conforme indicado no passo 2 do método 1 e, em seguida, guarde o formulário como frmComboTest5.

  2. Adicione uma caixa de combinação não vinculada denominada cboLookup e, em seguida, defina as propriedades do controlo da seguinte forma:

    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. No Construtor de Macros, crie uma nova macro incorporada no AfterUpdate evento para a caixa de combinação cboLookup.

  4. Na lista pendente Adicionar Nova Ação , selecione AbrirFormulário e, em seguida, defina as seguintes propriedades:

    Form Name:   frmComboTest5
    View:        Form
    Filter Name: <leave as empty>
    Where Condition: [ID] = [Forms]![frmComboTest5]![cboLookup].value
    Data Mode: <optional>
    Window Mode: <optional>
    
  5. Guarde e feche a macro.

  6. Guarde e execute o formulário.

Depois de alterar o valor da caixa de combinação, o formulário será fechado e aberto novamente com um filtro aplicado.