Como criar programaticamente uma nova coluna num relatório do Access

Número original da BDC: 812719

Resumo

Este artigo descreve como criar programaticamente uma coluna num relatório do Access. Pode adicionar dinamicamente a coluna ao relatório com o Método 1 ou o Método 2 descritos na secção "Mais Informações".

Nota

O código de exemplo neste artigo utiliza Objetos do Microsoft Data Access. Para que este código seja executado corretamente, tem de referenciar a Biblioteca de Objetos do Microsoft DAO 3.6. Para tal, clique em Referências no menu Ferramentas no visual basic Revisor e certifique-se de que a caixa de verificação Biblioteca de Objetos do Microsoft DAO 3.6 está selecionada.

Método 1: Adicionar Colunas ao Relatório Programaticamente

O exemplo que se segue mostra-lhe como criar programaticamente um relatório do Access. O código gera um relatório baseado na consulta de origem de registos. O relatório gerado apresenta a coluna Firstname e a coluna Lastname da tabela Employees da base de dados de exemplo Northwind.mdb.

  1. Inicie o Access.

  2. No menu Ajuda , clique em Bases de Dados de Exemplo e, em seguida, clique em Base de Dados de Exemplo da Northwind. Feche o formulário Do Painel de Navegação Principal quando for apresentado.

    Nota

    No Access 2007, clique em Exemplo no painel Categorias de Modelo, clique em Northwind 2007 e, em seguida, clique em Transferir.

  3. No painel esquerdo, clique em Relatórios.

    Nota

    No Access 2007, ignore este passo.

  4. No painel direito, faça duplo clique em Criar relatório na Vista estrutura.

    Nota

    No Access 2007, clique em Estrutura do Relatório no grupo Relatórios no separador Criar .

  5. No menu Ficheiro , clique em Guardar.

    Nota

    No Access 2007, clique no Botão do Microsoft Office e, em seguida, clique em Guardar.

  6. Na caixa de diálogo Guardar Como , escreva AccessColumnBuilder e, em seguida, clique em OK.

  7. Feche o relatório.

  8. No painel esquerdo, selecione Formulários.

    Nota

    No Access 2007, ignore este passo.

  9. No painel direito, faça duplo clique em Criar formulário na Vista estrutura.

    Nota

    No Access 2007, clique em Estrutura do Formulário no grupo Formulários no separador Criar .

  10. Adicionar um botão de comando ao formulário.

    Nota

    No Access 2007, clique em Botão para adicionar um botão ao formulário no grupo Controlos no separador Estrutura .

  11. Clique com o botão direito do rato no botão de comando, clique em Criar Evento, clique em Construtor de Código na caixa de diálogo Escolher Construtor e, em seguida, clique em OK.

  12. Adicione o código que se segue ao evento OnClick do botão de comando:

    Dim txtNew As Access.TextBox
    Dim labNew As Access.Label
    Dim lngTop      As Long
    Dim lngLeft     As Long
    Dim lblCol    As  Long
    Dim rpt As Report
    Dim reportQuery As String
    Dim rs As DAO.Recordset
    Dim i As Integer
    Dim prevColwidth As long
    
    lngLeft = 0
    lngTop = 0
    
    ' Open the report to design.
    ' To make changes in the number of columns that appear at run time.
    
    DoCmd.OpenReport "AccessColumnBuilder", acViewDesign
    
    Set rpt = Reports![AccessColumnBuilder]
    
    ' Change the number of columns required as per your requirement.
    reportQuery = "SELECT FirstName, LastName FROM Employees"
    
    ' Open the recordset.
    Set rs = CodeDb().OpenRecordset(reportQuery)
    ' Assign the query as a record source to report control.
    rpt.RecordSource = reportQuery
    
    ' Set the value to zero so that the left margin is initialized.
    prevColwidth = 0
    lblCol = 0
    ' Print the page header for the report.
    For i = 0 To rs.Fields.Count - 1
    Set labNew = CreateReportControl(rpt.Name, acLabel, acPageHeader, _
      , rs.Fields(i).Name, lblcol, , , lngTop)
      labNew.SizeToFit
      lblCol = lblCol + 600 + labNew.Width
    Next
    
    ' Create the column depending on the number of fields selected in reportQuery.
    ' Assign the column value to new created column.
    For i = 0 To rs.Fields.Count - 1
      ' Create new text box control and size to fit data.
      Set txtNew = CreateReportControl(rpt.Name, acTextBox, _
         acDetail, , , lngLeft + 15 + prevColwidth, lngTop)
      txtNew.SizeToFit
      txtNew.ControlSource = rs(i).Name
      ' Modify the left margin depending on the number of columns
      ' and the size of each column.
      prevColwidth = prevColwidth + txtNew.width
    Next
    'To save the modification to the report,  uncomment the following line of code:
    'DoCmd.Save
    ' View the generated report.
    DoCmd.OpenReport "AccessColumnBuilder", acViewPreview
    
    ' This opens the report in preview.
    
  13. Guarde e, em seguida, execute o formulário.

  14. Para pré-visualizar o relatório, clique no botão de comando que adicionou no passo 10.

    Os registos que se seguem aparecem na primeira página:

    First NameLast Name
    
    NancyDavolio
    
    MargaretPeacock
    
    ...............
    

    O relatório contém a coluna Nomepróprio e a coluna Apelido da tabela Funcionários . Pode guardar o relatório ou fazer as alterações necessárias à consulta e, em seguida, executar o relatório.

Método 2: Adicionar colunas ao relatório no tempo de execução ao definir a propriedade visível da coluna existente

Este exemplo mostra-lhe como apresentar uma nova coluna num relatório ao manipular a propriedade Visible do controlo.

O relatório contém quatro colunas. A Visible propriedade das três primeiras colunas está definida como sim. A Visible propriedade da quarta coluna está definida como não. Numa quebra de página, a Visible propriedade da quarta coluna está definida como sim quando a coluna é apresentada.

  1. Inicie o Access.

  2. No menu Ajuda , clique em Bases de Dados de Exemplo e, em seguida, clique em Base de Dados de Exemplo da Northwind. Feche o formulário Do Painel de Navegação Principal quando for apresentado.

    Nota

    No Access 2007, clique em Exemplo no painel Categorias de Modelo, clique em Northwind 2007 e, em seguida, clique em Transferir.

  3. Para criar um relatório com o nome Report1 e baseado na tabela Produtos , siga estes passos:

    1. Na janela Base de Dados , clique em Relatórios e, em seguida, clique em Novo.

      Nota

      No Access 2007, clique em Assistente de Relatórios no grupo Relatórios no separador Criar .

    2. Na caixa de diálogo Novo Relatório , clique em Vista Estrutura, selecione Produtos e, em seguida, clique em OK.

    3. Adicione as seguintes caixas de texto à secção Detalhes do relatório. Alinhar as caixas de texto.

    4. Coloque as etiquetas correspondentes na secção Cabeçalho da Página do relatório. Alinhe as etiquetas.

      Report: Report1
      --------------------------
      Caption: TestReport
      ControlSource: Products
      
      Label:
         Name: ProductName_label
      
      Text Box:
         Name: ProductName
         ControlSource: ProductName
      
      Label:
         Name: UnitPrice_label
      
      Text Box:
         Name: UnitPrice
         ControlSource: UnitPrice
      
      Label:
         Name: UnitsInStock_label
      
      Text Box:
         Name: UnitsInStock
         ControlSource: UnitsInStock
      
      Label:
         Name: TotalPrice_label
         Visible: No
      
      Text Box:
         Name:  TotalPrice
         ControlSource:  =[UnitPrice] * [UnitsInStock]
         Visible: No
      
  4. Adicione um controlo de caixa de texto com as seguintes propriedades à secção Detalhes . Coloque a caixa de texto diretamente acima do controlo ProductName .

    Este controlo funciona como um contador para o número de registos no relatório.

    Text Box:
    -----------------------
    Name: Counter
    ControlSource: =1
    Visible: No
    RunningSum: Over All
    
  5. Na Caixa de Ferramentas, clique em Quebra de Página.

    Nota

    No Access 2007, clique em Adicionar ou Remover Quebra de Página no grupo Controlos no separador Estrutura .

  6. Adicione um controlo de quebra de página ao canto inferior esquerdo da secção Detalhes . Coloque o controlo de quebra de página diretamente abaixo do controlo ProductName . Defina a propriedade Nome como PageBreak.

  7. Na secção Detalhe , defina a propriedade OnFormat para o seguinte procedimento de evento:

    If Me![Counter] Mod 2 = 0 Then Me![PageBreak].Visible = True _
    Else Me![PageBreak].Visible = False
    
  8. Para reduzir o espaço em branco no relatório, coloque o ponteiro entre a parte inferior da secção Detalhe e o Rodapé da Página e, em seguida, arraste para cima.

  9. Na secção Rodapé da Página , defina a propriedade OnPrint para o procedimento de evento que se segue:

    If Me![PageBreak].Visible = True Then
     Me![TotalPrice].Visible = True
     Me![TotalPrice_label].Visible = True
    Else
     Me![TotalPrice].Visible = False
     Me![TotalPrice_label].Visible = False
    End If
    

    Quando o PageBreak ocorre, é apresentada a coluna Preço Total .

  10. Pré-visualize o relatório. Os registos que se seguem aparecem na primeira página:

    Product NameUnit PriceUnit in Stock
    
    Cahi$18.0039
    
    Chang$19.0017
    

    Nota

    A primeira página do relatório contém três colunas.

    Os registos que se seguem aparecem na segunda página:

    Product NameUnit PriceUnit in StockTotal Amount
    
    Aniseed Syrup $10.0013    130
    
    Chef A...    $22.00 53    1166
    

    Nota

    A quebra de página ocorre após a primeira página. Por conseguinte, a segunda página do relatório contém quatro colunas.

Referências

Para obter mais informações sobre como criar programaticamente um relatório do Access, veja o seguinte artigo:

Criar um relatório simples