Data Report - Criando relatórios dinâmicos


A algum tempo atrás abordamos como usar o Data Report para criar relatórios ;se quiser relembrar leia o artigo : Usando Data Report . Vamos avançar um pouco mais e mostrar como gerar relatórios dinâmicos com o Data Report.

Vamos criar um relatório usando o Data Report que será preenchido em tempo de execução que não estará vinculado a um Data Environment . Toda a configuração será feita em tempo de execução : o nome das colunas e os dados para os campos nome e sobrenome.

Vamos gerar um relatório com o nome e sobrenome dos funcionários da tabela - funcionarios - do banco de dados Nwind.mdb. A tabela funcionarios tem os seguintes dados :

1- Inicie um novo projeto no VB e no formulário padrão - form1 - escolha a opção Project do menu e selecione - "Add Data Report". (se esta opção não estiver presente selecione no menu Project a opção - Components - e clique na aba Designers incluindo a seguir uma referência ao Data Report.veja figura ao lado)

2- No Data Report insira dois controles RptLabel e dois controles RptTextBox na seção Detail do relatório e um controle RptLabel na Seção Page Header conforme figura abaixo:

3- No formulário padrão insira um botão de comando - command1 . Inclua em seguida o código conforme abaixo no formulário :

a- Seção General Declarations - Declaração das variáveis objetos usadas no sistema

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command

b- Evento Click do botão de comando - command1 :

Private Sub Command1_Click()
Dim q As Integer
Dim i As Integer
Dim x As Integer
Dim z As Integer

x = 0: q = 0: z = 0

With DataReport1
    .Hide
    Set .DataSource = rs
    .DataMember = ""
   With .Sections("Section1").Controls
      For i = 1 To .Count
        If TypeOf .Item(i) Is RptLabel Then
         .Item(i).Caption = rs.Fields(q).Name & " :"
          q = q + 1
        End If
        If TypeOf .Item(i) Is RptTextBox Then
          .Item(i).DataMember = ""
          .Item(i).DataField = rs(z).Name
          z = z + 1
        End If
     Next i
   End With
   .Refresh
   .Show
End With
End Sub

Aqui fazemos o seguinte:

 

  1. definimos e atribuimos valores iniciais a x, q e z
  2. escondemos o data report
  3. definimos a fonte de dados do data report
  4. Na Section1 verificamos o tipo do controle
  5. Se for um RptLabel atribui o nome da coluna
  6. Se for um RptTextbox atribui o valor da coluna
  7. Atualiza o data Report (Refresh)
  8. Exibe o relatório (Show)

c- evento Load do formulário - form1 :

Private Sub Form_Load()

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=c:\teste\Nwind_2.mdb"

With cmd
 .ActiveConnection = cn
 .CommandType = adCmdText
 .CommandText = "Select Nome ,Sobrenome from Funcionários"
 .Execute
End With

With rs
   .ActiveConnection = cn
   .CursorLocation = adUseClient
   .Open cmd
End With
End Sub
1-Abrimos a conexão com o banco de dados

2-Criamos um objeto command na conexao

3-Atribuimos a instrução SQL ao command

4-Executamos o command

5-Definimos a conexao ativa para o recordset

6- abrimos o command do recordset

Já podemos executar o projeto e gerar o relatório. Pressione F5 e clique no botão - Exibir Relatório . O relatório exibido será:

Simples e funcional , não é mesmo ? Até o próximo artigo ......

Referência : HOW TO : Dynamically Populate a Data Report in Visual Basic ( Q240019)


José Carlos Macoratti