Visual Basic 6 - Gerando relatórios com DataReport em um intervalo de datas


Pensei que nunca mais irei voltar a falar do DataReport mas atendendo solicitações eu vou mostrar neste artigo , de forma rápida e simples, como você pode gerar relatórios com DataReport em intervalo de datas.

Inicie um novo projeto no VB6 e insira um componente DataEnvironment no seu projeto. Vamos usar este componente apenas para criar o comando SHAPE que irá gerar a instrução SQL para extrair os dados das tabelas Orders e Customers do banco de dados Norhtwind.mdb.

Antes de criarmos a conexão aproveite e inclua no formulário padrão, que eu vou chamar de frmDataEnv,  os componentes:

O código deste formulário é dado a seguir:

No código eu estou inicializando os controles DTPicker ,  fazendo uma validação de datas e exibindo o relatório gerado.

Option Explicit
Private Sub cmdVisualiza_Click()
'Exibe o relatório no modo visualização
  DataReport1.Show vbModal
End Sub

Private Sub DTPicker1_Change()
    'Verifica se o valor da primeira data é menor que o da segunda e faz o ajuste
    If DTPicker1.Value > DTPicker2.Value Then
        DTPicker1.Value = DTPicker2.Value
    End If
End Sub

Private Sub DTPicker2_Change()
    'Verifica se o valor da segunda data é maior que o da primeira e faz o ajuste
    If DTPicker2.Value < DTPicker1.Value Then
        DTPicker2.Value = DTPicker1.Value
    End If
End Sub

Private Sub Form_load()
  DTPicker1.Value = CDate("01/01/1994") 'inicia os valores para o primeiro controle
  DTPicker2.Value = CDate("12/21/1996") 'inicia os valores para o segundo controle
End Sub

Voltando ao DataEnvironment faça o seguinte:

Inclua um descritor DataReport - DataReport1 - no projeto e crie um relatório conforme abaixo:

Agora no evento Initialize do DataReport inclua o código SQL (comando SHAPE) gerado:

Private Sub DataReport_Initialize()

  'define as variáveis usadas no projeto
  Dim strSQL As String
  Dim strAte As String
  Dim strInicio As String
  Dim oConn As New ADODB.Connection
  Dim oRS As New ADODB.Recordset
  
  oConn.CursorLocation = adUseClient
  'estou usando a conexão que ja foi criada no dataenvironment
  oConn.ConnectionString = DataEnvironment1.Connection1
  'abre a conexão com o banco de dados Norhtwind.mdb em d:\teste
  oConn.Open
  
  'pega as datas de inicio e de fim
  With frmDataEnv
    strInicio = .DTPicker1.Value
    strAte = .DTPicker2.Value
  End With
  
  'define o titulo do relatório
  DataReport1.Title = "De: " & strInicio & " Até: " & strAte
  
  'define o comando SHAPE
  strSQL = "SHAPE { "
  strSQL = strSQL & "SELECT DISTINCT C.* "
  strSQL = strSQL & "FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID "
  strSQL = strSQL & "WHERE O.Orderdate "
  strSQL = strSQL & "BETWEEN #" & strInicio & "# "
  strSQL = strSQL & "AND #" & strAte & "# "
  strSQL = strSQL & "ORDER BY C.CompanyName "
  strSQL = strSQL & "} AS Command1 "
  strSQL = strSQL & "APPEND ({ "
  strSQL = strSQL & "SELECT Orders.* "
  strSQL = strSQL & "FROM Orders "
  strSQL = strSQL & "WHERE Orderdate "
  strSQL = strSQL & "BETWEEN #" & strInicio & "# "
  strSQL = strSQL & "AND #" & strAte & "# "
  strSQL = strSQL & "} AS Command2 "
  strSQL = strSQL & "RELATE 'CustomerID' TO 'CustomerID') "
  strSQL = strSQL & "AS Command2 "
  oRS.Open strSQL, oConn, adOpenForwardOnly
  
  'atribui o recordset gerado ao datareport
  Set DataReport1.DataSource = oRS
  
End Sub

 

No código acima estou definindo o comando SHAPE. Lembra dele ?  Não !!! Então para saber mais leia os seguintes artigos do site :

O comando SHAPE / APPEND define a estrutura da hierarquia de um recordset e os comandos necessários para preencher o recordset com os dados da hierarquia. O comando atribui um recordset filho para a propriedade Value dos objetos Fields de um Recordset Pai.

A sintaxe é :

SHAPE {parent-command} [[AS] table-alias]
APPEND {child-command}
RELATE(parent-column TO child-column)"

Onde :

A sintaxe usada é a da linguagem DATA SHAPING .  Podemos dividir a instrução em três partes:

  1. A instrução SQL que gera o Recordset Pai ( Parent Recordset)
  2. A instrução SQL que gera o Recordset Filho ( Child Recordset)
  3. A instrução que faz o relacionamento entre os dois Recordsets

A sintaxe é a seguinte:

"SHAPE {parent-command} [[AS] table-alias]
APPEND {child-command}
RELATE(parent-column TO child-column)"
 
"SHAPE {< INSTRUÇÃO  SQL 1 >} [[AS] table-alias]
APPEND {
<INSTRUÇÃO SQL 2>}
RELATE(<
INSTRUÇÃO SQL 3>)" 

Nota: O aliás usado no comando SHAPE , ([AS] table-alias]) é opcional

Agora é só rodar e verificar o relatório gerado:

Pegue o projeto aqui : drpt_dat.zip

Eu sei é apenas VB , mas eu gosto...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti