none
Crystal Report RRS feed

  • Pergunta

  • Olá Pessoal estou com a seguinte dúvida:

    Tenho a seguinte função:

    Public Shared Function CarregaRelatorio(ByVal CrystalReportViewer As Object,
    ByVal lobjValorParametros() As Object,
    ByVal lstrNomeParametros() As String,
    strRelatorio As String) As Retorno


            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
            Dim _retorno As New Retorno
            _retorno.Sucesso = True


            '# Verifica o acesso ao arquivo .rpt
            If (System.IO.File.Exists(My.Application.Info.DirectoryPath & "\" & strRelatorio) = False) Then
                _retorno.Sucesso = False
                _retorno.MsgErro = "+ CARREGA RELATORIO + Não foi possível acessar o relatório." & vbCrLf & _
                                "Se o erro persistir, entre em contato com o Administrador."
                _retorno.NumErro = "Fcao"
                _retorno.TipoErro = DadosGenericos.TipoErro.Funcional
                _retorno.ImagemErro = DadosGenericos.ImagemRetorno.Alerta
                Return _retorno
                Exit Function
            End If


            Try

                ''# Passa os dados para conexão-------------------------------
                ''Propriedades exigidas para Conexao de banco diferente de windows autent.
                'lconInfo.DatabaseName = Conection.ParametroConexao(1)
                'lconInfo.ServerName = Conection.ParametroConexao(0)
                'lconInfo.UserID = Conection.ParametroConexao(2)
                'lconInfo.Password = Conection.ParametroConexao(3)

                'Para windows autent. IntegratedSecurity deve ser igual a  true
                lconInfo.IntegratedSecurity = True
                '-----------------------------------------------------------

                '# Carrega o arquivo rpt
                lrptRelatorio.Load(My.Application.Info.DirectoryPath & "\" & strRelatorio)

                '# 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


                If lobjValorParametros(0) = "" And lstrNomeParametros(0) = "" Then GoTo CarregaRelatorio

                '# 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

    CarregaRelatorio:
                '# crvVisualizador é meu objeto CrystalReportViewer
                CrystalReportViewer.ReportSource = lrptRelatorio
                CrystalReportViewer.Refresh()
            Catch ex As Exception
                _retorno.Sucesso = False
                _retorno.MsgErro = "+ CARREGA RELATORIO + " & ex.Message
                _retorno.NumErro = "Fcao"
                _retorno.TipoErro = DadosGenericos.TipoErro.Funcional
                _retorno.ImagemErro = DadosGenericos.ImagemRetorno.Alerta
            End Try

            Return _retorno
        End Function

    Ela funcionar bem porém notei que no SQL2008 ele nao fecha a conexão.

    Alguem poderia me ajudar a fechar esta conexao?

    Desde ja agradeço.

    Obrigado!

    terça-feira, 21 de agosto de 2012 18:44

Respostas

  • Porque no Finally vc não fecha a conexão??

    Try // Catch ex As Exception // Finally

    connection.close()

       End Try


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    terça-feira, 21 de agosto de 2012 19:03