Jump to content
Fórum Script Brasil
  • 0

Crystal Reports - Coleção como parâmetro!


Kiwanax

Question

1 answer to this question

Recommended Posts

  • 0

Cara, tenho um exemplo em VB.NET, que você passa o nome dos parâmetros no Crystal (@NOME, @ENDERECO...) e seus respectivos valores:

Public Sub lsubCarregaRelatorio(ByVal lobjValorParametros() As Object, ByVal lstrNomeParametros() As String)
        Dim lrptRelatorio As New ReportDocument
        Dim lconInfo As New ConnectionInfo
        Dim ltblInfo As New TableLogOnInfo
        Dim lparParametro As ParameterFieldDefinition
        Dim lfilCampo As ParameterFieldDefinitions
        Dim ldisDiscrete As ParameterDiscreteValue
        Dim lvalValor As ParameterValues
        Dim lstrTexto As String

        '# Verifica o acesso ao arquivo .rpt
        If (System.IO.File.Exists("CaminhoRelatorios\NomeRelatorio) = False) Then
            MessageBox.Show("Não foi possível acessar o relatório." & vbCrLf & _
                            "Se o erro persistir, entre em contato com o Administrador.", "Sistema", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If

        '# Passa os dados para conexão
        lconInfo.DatabaseName = "Banco"
        lconInfo.ServerName = "Servidor"
        lconInfo.UserID = "Usuario"
        lconInfo.Password = "Senha"

        '# Carrega o arquivo rpt
        lrptRelatorio.Load("CaminhoRelatorios\Relatorio.rpt")

        '# Realiza a conexão das tabelas do relatório
        For Each ltblTable As Table In lrptRelatorio.Database.Tables
            ltblInfo.ConnectionInfo = lconInfo
            ltblTable.ApplyLogOnInfo(ltblInfo)
        Next

        '# Conexão das tabelas dos subrelatórios (CASO EXISTA)
        For lintContador = 1 To lrptRelatorio.Subreports.Count
            For Each ltblTable As Table In lrptRelatorio.Subreports(lintContador - 1).Database.Tables
                ltblInfo.ConnectionInfo = lconInfo
                ltblTable.ApplyLogOnInfo(ltblInfo)
            Next
        Next

        '# Recebe os parâmetros existentes no rpt
        lfilCampo = lrptRelatorio.DataDefinition.ParameterFields

        '# Loop que irá configurar cada parâmetro
        For lintContador As Integer = 0 To UBound(lobjValorParametros)

            lparParametro = lfilCampo.Item(lstrNomeParametros(lintContador))
            lvalValor = lparParametro.CurrentValues
            ldisDiscrete = New ParameterDiscreteValue

            '# Verifica o tipo de dado para passar o valor correto
            If IsDate(lobjValorParametros(lintContador)) Then
                ldisDiscrete.Value = IIf(lobjValorParametros(lintContador) = "00:00:00" Or lobjValorParametros(lintContador) = "0001-01-01 00:00:00", "1899-12-30", lobjValorParametros(lintContador))

            ElseIf IsNumeric(lobjValorParametros(lintContador)) Then
                ldisDiscrete.Value = lobjValorParametros(lintContador)

            Else
                ldisDiscrete.Value = IIf(Trim(lobjValorParametros(lintContador)) = "NULL", DBNull.Value, Trim(lobjValorParametros(lintContador)))

            End If

            '# Adiciona e confirma os valores
            lvalValor.Add(ldisDiscrete)
            lparParametro.ApplyCurrentValues(lvalValor)
        Next

        '# crvVisualizador é meu objeto CrystalReportViewer
        crvVisualizador.ReportSource = lrptRelatorio
        crvVisualizador.Refresh()

    End Sub

Sendo que lobjValorParametros é um vetor contendo os valores dos parâmetros e lstrNomeParametros é um vetor contendo os nomes dos parâmetros, na mesma ordem do outro vetor. Por exemplo, se @IdFilial está na posição zero do lstrNomeParametros, 1 está na posição zero do vetor lobjValorParametros, correspondendo assim ao mesmo campo.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...