Crystal Report – Parâmetros entre duas datas

O primeiro relatório que consegui conectar a um banco de dados foi através do site http://www.macoratti.net , que aliás é onde tiro muitas duvidas.

Mas me deparei com uma situação que não encontrava solução em minhas pesquisas, que é passar parâmetro entre duas datas para a geração do relatório no Crystal Report. Então comecei reparar nas propriedades de parâmetros do namespaces do Crystal, e acabei fazendo adaptações e descobrindo um caminho.

Apesar de ser o meu primeiro tutorial, vou tentar explicar detalhadamente. Primeiro vou falar da base de dados que usarei que é Access. Uma tabela simples só para fins didáticos como vemos a estrutura a seguir:

Estrutura da Tabela

Utilizando o Visual Studio 2008, insira um novo formulário no seu projeto e adicione o componente CrystalReportView, o seu formulário ficará assim:

Visualização do Form com o componente CrystalReportView

Adicione um Módulo para declarar as variáveis data_Inicial e data_Final que usaremos como parâmetro do relatório desta maneira.

Public data_Inicial, data_Final As DateTime
No Formulário que exibirá o relatório insira o código abaixo:
Imports System
Imports System.Drawing
Imports System.Drawing.Printing
Imports System.IO
Imports System.Windows.Forms
Imports System.Data.OleDb
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
‘Variaveis da conexão com banco de dados

Dim oCon As OleDbConnection
Dim dt1 As OleDbDataAdapter
Dim ds As DataSet
Dim con As String
Dim sql As String

con = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source =E:\Hora.mdb; Persist Security Info=True;Jet OLEDB:Database Password=123456”
oCon = New OleDbConnection(con)
oCon.Open()

sql = “Select * from Apontamento”
dt1 = New OleDbDataAdapter(sql, con)
ds = New DataSet
dt1.Fill(ds, “Apontamento”)

Dim rpt As New Apontamento
rpt.SetDataSource(ds)
‘Senha para acessar o banco de dados
rpt.SetDatabaseLogon(“Administrador”, “123456”)
oCon.Close()
dt1.Dispose()
ds.Dispose()

‘ atribui os parametros entre datas
Dim crParameterRangeValue As ParameterRangeValue
Dim crParameterFieldDefinitions2 As ParameterFieldDefinitions
Dim crParameterFieldLocation2 As ParameterFieldDefinition
Dim crParameterValues2 As ParameterValues
crParameterFieldDefinitions2 = rpt.DataDefinition.ParameterFields

‘Nome do parametro criado no relatório
crParameterFieldLocation2 = crParameterFieldDefinitions2.Item(“ParamentroData”)
crParameterValues2 = crParameterFieldLocation2.CurrentValues
crParameterRangeValue = New CrystalDecisions.Shared.ParameterRangeValue
‘Recebe o valor da variavel data inicial
crParameterRangeValue.StartValue = data_Inicial
‘Recebe o valor da variavel data inicial
crParameterRangeValue.EndValue = data_Final
crParameterValues2.Add(crParameterRangeValue)
crParameterFieldLocation2.ApplyCurrentValues(crParameterValues2)
‘ Define a fonte do controle Crystal Report Viewer como sendo o relatorio definido acima
CrystalReportViewer1.ReportSource = rpt

End Sub
End Class

Agora crie o relatório e a conexão com o banco de dados conforme as imagens abaixo:

No Visual Studio 2008 clique com o botão direito no seu projeto e adicione um relatório do Crystal Report e renomeie, irá aparecer o assistente para a criação do relatório.

   Deixe tudo como está e clique em OK.

Selecione o item marcado.

 

 Localize o banco de dados clique em Segure Logon e digite a senha do banco de dados (afinal é bom ter uma senha no banco) e clique em Finish.

Selecione a tabela clicando no botão “>” em seguida clique em Next.

 Selecione os campos da tabela desejados e clique em Next.

 O agrupamento neste caso é opcional, mas vamos clicar em Finish para visualizar como ficou. Para não perder o trabalho clique em Ctrl+S para salvar.

Criando os Parametros no Relatório

Já no relatório, clique com o botão direito do rato em New Parameter.

  Na tela que se abrirá, Digite o nome do parâmetro, que no nosso caso é “ParameterData” e selecione o tipo de dado que será o nosso parâmetro(DateTime). Selecione Range Values(s), porque no nosso caso são dois valores que serão passados. Clique em “Default Values…” para selecionar o campo que será comparado na instrução SQL interna do Crystal conforme a figura abaixo .

 Selecione o campo da tabela que contém as informações a serem filtradas e Ok.

 Clique em “Select Expert” como mostra a figura.

Selecione novamente o campo a ser filtrado e clique em Ok.

 Selecione na lista conforme na figura e clique em Ok. A formatação fica por sua conta, mas o mecanismo do negócio já está pronto. Agora vamos à tela para selecionar as datas.
Crie um Formulário conforme a figura abaixo, Dois DateTimePicker e um Botão:

Formulário para captação do parametro.

No evento Click do Botão insira o seguinte código:
‘Verifica se a data final é posterior à data inicial
If DateTimePicker1.Value > DateTimePicker2.Value Then
MessageBox.Show(“A data inicial deve ser anterior à final!”, “Parametro incorreto”, MessageBoxButtons.OK, MessageBoxIcon.Warning)
Exit Sub
Else
‘Passa as datas para as variaveis dos parametros
data_Inicial = FormatDateTime(DateTimePicker1.Value, DateFormat.ShortDate)
data_Final = FormatDateTime(DateTimePicker2.Value, DateFormat.ShortDate)
Form1.Show()
Me.Close()
End If

Pronto, agora é só executar e ver o resultado.

Para fazer o download do projeto clique aqui  

Anúncios