Como utilizar caixas de combinação parametrizadas num projecto do Access

Traduções de Artigos Traduções de Artigos
Artigo: 281870 - Ver produtos para os quais este artigo se aplica.
Este artigo foi publicado anteriormente em PT281870
Moderado: requer conhecimentos básicos sobre macros, codificação e interoperabilidade.

Este artigo aplica-se apenas a um projecto do Microsoft Access (.adp).

Expandir tudo | Reduzir tudo

Nesta página

Sumário

As caixas de combinação representam um bom método de apresentar uma lista de opções ao utilizador. Se a origem da linha de uma caixa de combinação tiver de se basear num subconjunto de registos de uma tabela ou consulta, é possível adicionar uma cláusula WHERE para limitar as opções.

O exemplo deste artigo adiciona uma caixa de combinação ao formulário Clientes do exemplo de projecto NorthwindCS.adp. A caixa de combinação lista as encomendas efectuadas pelo cliente actual. Quando estiver seleccionada o formulário Encomendas é aberto, apresentando os detalhes da encomenda seleccionada.

É possível utilizar quatro métodos diferentes para criar uma lista de encomendas correspondentes efectuadas por um cliente. Estes métodos utilizam um projecto do Access (.adp) com o Microsoft SQL Server 2000 como origem de dados. Estes métodos são descritos na secção que se segue.

Mais Informação

Criar a caixa de combinação

Esta secção mostra como começar por criar uma caixa de combinação no formulário Clientes que apresente uma lista das encomendas do cliente actual.
  1. Abra o formulário Clientes na vista Estrutura.
  2. Na caixa de ferramentas, clique em Assistentes de controlo e adicione uma caixa de combinação ao formulário.
  3. Na primeira página do assistente, opte por procurar os valores numa tabela ou consulta e clique em Seguinte.
  4. Na segunda página do assistente, clique na tabela Encomendas e clique em Seguinte.
  5. Na terceira página do assistente, adicione CódigoDaEncomenda, CódigoDoCliente e DataDaEncomenda como campos da caixa de combinação e clique em Seguinte.
  6. Na quarta página do assistente, clique para desmarcar a opção Ocultar a coluna chave (recomendado) e diminua a coluna CódigoDoCliente de modo a que não fique visível. Clique em Seguinte.
  7. Na quinta página do assistente, clique novamente em Seguinte para aceitar CódigoDaEncomenda como o campo para armazenar ou utilizar na base de dados.
  8. Na sexta página do assistente, opte por memorizar o valor para utilizar mais tarde e clique em Seguinte.
  9. Na última página do assistente, rotule a caixa de combinação como Seleccionar encomenda e clique em Concluir.
  10. Abra a folha de propriedades da caixa de combinação e mude o nome da caixa de combinação para CaixaCombinaçãoSeleccionarEncomenda.
  11. Defina a propriedade OnClick da caixa de combinação como o seguinte procedimento de acontecimento:
    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
    					

Adicionar o código para actualizar a caixa de combinação

Esta secção apresenta os métodos que podem ser utilizados para actualizar a caixa de combinação. Seleccione um dos quatro métodos que se seguem e adicione o código correcto ao acontecimento OnEnter da caixa de combinação.

Para os métodos 1 e 2, sempre que a caixa de combinação for seleccionada o acontecimento OnClick repõe a origem da linha da caixa de combinação de forma a apresentar apenas as encomendas que correspondam ao cliente actual.

NOTA: dado que o campo CódigoDoCliente é um campo de texto, devem ser adicionadas aspas simples (') à volta da referência Forms. Por exemplo, a cláusula WHERE gerada é convertida de:
WHERE CustomerID = '" & Forms![Customers]![CustomerID] & "'"
				
para:
WHERE CustomerID = 'ALFKI'
				

Método 1: Utilizar a selecção ad hoc

Defina a propriedade OnEnter da caixa de combinação como o seguinte procedimento de acontecimento:
Me.SelectOrderCombo.RowSource = "SELECT TOP 100 PERCENT OrderID, CustomerID, OrderDate FROM Orders WHERE " _
     & "CustomerID = '" & Forms![Customers]![CustomerID] & "' ORDER BY OrderDate DESC"

				

Método 2: Utilizar uma vista do SQL Server

  1. Crie uma nova vista no estruturador de vistas e seleccione os campos CódigoDaEncomenda, CódigoDoCliente e DataDaEncomenda da tabela Encomendas. Para ordenar a lista de encomendas da mais recente para a mais antiga, defina o Tipo de ordenação do campo DataDaEncomenda como Descendente.
  2. Guarde a vista como vtaEncomendasDoCliente.
  3. Defina a propriedade OnEnter da caixa de combinação como o seguinte procedimento de acontecimento:
    Me.SelectOrderCombo.RowSource = "SELECT * FROM vwCustomerOrders WHERE CustomerId = '" & Forms![Customers]![CustomerID] & "'"
    					
Para os métodos 3 e 4, o método Requery da caixa de combinação é chamado no acontecimento OnEnter para voltar a executar um procedimento armazenado ou uma função de SQL para devolver os registos correspondentes. Nestes exemplos, o Parâmetro é definido como um controlo do formulário, utilizando @ControlName nos critérios. O Access avalia automaticamente os critérios e solicita os registos correspondentes.

Nos exemplos que se seguem, a caixa de combinação devolve uma lista de todas as encomendas do cliente actual. Dado que a caixa de texto CódigoDoCliente contém o código do cliente actual, é possível referir directamente a caixa de texto CódigoDoCliente no procedimento armazenado ou nos critérios da função de SQL.

Método 3: Utilizar um procedimento armazenado do SQL Server

  1. Crie um novo procedimento no estruturador de gráficos.
  2. Seleccione a tabela Encomendas e adicione os campos CódigoDaEncomenda, CódigoDoCliente e DataDaEncomenda ao procedimento armazenado.
  3. Escreva @CustomerID como critério para o campo CódigoDoCliente e ordene o campo DataDaEncomenda de forma descendente.
  4. Guarde o procedimento armazenado como paEncomendasDoCliente e feche-o.
  5. Defina o procedimento armazenado paEncomendasDoCliente como a origem da linha da caixa de combinação.

    NOTA: a instrução de SQL que se segue é criada e guardada pelo estruturador de procedimentos armazenados:
    CREATE PROCEDURE dbo.spCustomerOrders
      (@CustomerID varchar(5))
      AS SELECT OrderID, CustomerID, OrderDate
      FROM   dbo.Orders
      WHERE  (CustomerID = @CustomerID)
      ORDER BY OrderDate DESC
    					
  6. Defina a propriedade OnEnter da caixa de combinação como o seguinte procedimento de acontecimento:
    Me.SelectOrderCombo.Requery
    					

Método 4: Utilizar uma função do SQL Server 2000

Só poderá utilizar este método se o projecto do Access estiver a utilizar o SQL Server 2000 ou uma versão posterior como origem de dados.
  1. Crie uma função no estruturador de gráficos.
  2. Seleccione a tabela Encomendas e adicione os campos CódigoDaEncomenda, CódigoDoCliente e DataDaEncomenda ao procedimento armazenado.
  3. Escreva @CustomerID como critério para o campo CódigoDoCliente e ordene o campo DataDaEncomenda de forma descendente.
  4. Guarde a função como fnEncomendasDoCliente e feche-a.
  5. Defina a função fnEncomendasDoCliente como a origem da linha da caixa de combinação.

    NOTA: a instrução de SQL que se segue é criada e guardada pelo estruturador de procedimentos armazenados:
    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. Defina a propriedade OnEnter da caixa de combinação como o seguinte procedimento de acontecimento:
    Me.SelectOrderCombo.Requery
    					
Para testar estes métodos, abra o formulário e seleccione a partir da caixa de combinação Seleccionar encomenda. O acontecimento OnEnter repete a consulta da caixa de combinação, gerando automaticamente uma lista de encomendas do cliente actual. Quando uma encomenda for seleccionada será executado o acontecimento OnClick da caixa de combinação, sendo aberto o formulário Encomendas apresentando a encomenda seleccionada.

Propriedades

Artigo: 281870 - Última revisão: 26 de janeiro de 2006 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft Access 2002 Standard Edition
Palavras-chave: 
kbprogramming kbadp kbclientserver kbhowto KB281870

Submeter comentários

 

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