none
Erro na geração do relatório em Crystal RRS feed

  • Pergunta

  • Bom dia Laérico, excelente trabalho. Fiz todos os procedimentos, porém quando coloco para executar, na página em execução apresenta o seguinte erro:

     

    Logon failed. Details: crdb_adoplus : Object reference not set to an instance of an object. Error in File C:\DOCUME~1\Adm\CONFIG~1\Temp\CRHistorico {E6ABCE31-E3BD-46B8-97EF-1F5EFEB2A600}.rpt: Unable to connect: incorrect log on parameters.

     

    Obrigado,

     

    terça-feira, 14 de outubro de 2008 18:22

Respostas

  •  

    Jessé,

     

    Eu tenho um exemplo mais simples para visualizar um relatório com Crystal Reports.

     

    Nesse exemplo eu utilizei o banco de dados ACCESS com Crystal Reports (vc precisa apenas alterar o provider do banco de dados).

     

    Referencias do Form:

    Code Snippet

     

    'provider do banco de dados ACCESS

    Imports System.Data.OleDb

    Imports System.Data

    'crystal reports

    Imports CrystalDecisions.CrystalReports.Engine

    Imports CrystalDecisions.Shared

    'outros

    Imports System.Text 'StringBuilder

    Imports System.Configuration 'ConnectionStrings

    Imports System.IO 'Path.Combine

     

     

     

    Sub:

     

    Code Snippet

    Private Sub PreviewRelClientes(ByVal oTable As DataTable)

    '

    'visualizar o relat¢rio "rptCustomer.rpt" utilizando a fun‡Æo CarregarListaClientes()

    '

    Try

    '1 passo: definindo o relat¢rio a ser visualizado (ReportPath)

    Dim crReportDocument As New rptCustomer

    '2 passo: definindo o DataSource do relat¢rio

    crReportDocument.SetDataSource(oTable)

    '3 passo: visualizando o relat¢rio...

    crPreview.DisplayGroupTree = False

    crPreview.ReportSource = crReportDocument

    Catch ex As Exception

    MsgBox(ex.Message)

    End Try

    End Sub

     

     

    Observe que estou retornando um DataTable que será utilizado para definir o DataSource do Relatório na sub PreviewRelClientes

     

    Code Snippet

    Private Function CarregarListaClientes() As DataTable

    'definindo a string de conexÆo do banco de dados

    Dim strConexao As String = _

    ConfigurationManager.ConnectionStrings("MSAccess").ToString

    Dim oConn As New OleDbConnection(strConexao)

    Dim strSQL As New StringBuilder

    Dim oTable As New DataTable()

    Dim oCmd As OleDbCommand = Nothing

    Try

    'abrindo conexÆo com o banco de dados.

    oConn.Open()

    'definindo o SQL

    strSQL.Append(" Select CustomerID ")

    strSQL.Append(" ,CustomerName")

    strSQL.Append(" ,Phone")

    strSQL.Append(" ,EmailAddress")

    strSQL.Append(" ,AddressLine")

    strSQL.Append(" ,City")

    strSQL.Append(" ,StateProvinceName")

    strSQL.Append(" ,PostalCode")

    strSQL.Append(" ,CountryName")

    strSQL.Append(" ,LastUpdate ")

    strSQL.Append(" FROM Customer inner join Country ")

    strSQL.Append(" on Customer.CountryID = Country.CountryID ")

    strSQL.Append(" Order by CountryName, CustomerName ")

    'carregando os dados do banco de dados

    Dim oDA As New OleDbDataAdapter(strSQL.ToString, oConn)

    oDA.Fill(oTable)

    Catch ex As Exception

    MsgBox(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oConn = Nothing

    End Try

    Return oTable

    End Function

     

     

    Para visualizar o relatório adicione a linha no evento Load da página

     

    Code Snippet

    PreviewRelClientes(CarregarListaClientes)

     

     

    [ ] 's

     

    Laércio.

    quinta-feira, 16 de outubro de 2008 13:31
    Moderador

Todas as Respostas

  • Olá Jessé,

     

    Você está passando um DataSet ou DataTable no DataSource do Relatório?

     

    Exemplo (Utilizando DataSet) :

    Code Snippet

    assim dá errro:
    report.SetDataSource(dsRelatorio);

    Assim funciona
    report.SetDataSource(dsRelatorio.Tables(0))

     

     

    [ ]'s

     

    Laércio.

     

     

    terça-feira, 14 de outubro de 2008 21:28
    Moderador
  • Bom dia Laercio, eu estou passando um dataset, eu acho. Eu sou iniciante em programação e aprovetei parte do código que você postou para gerar o relatório, abaixo segue o código.

     

    Public Sub Gera_Relatorio()

            Dim crReportDocument As New ReportDocument
            Dim strConexao As String = ConnectionStrings("SicadConnectionString").ConnectionString()
            Dim oConn As New SqlConnection
            Dim strSQL As New StringBuilder
            Dim oDataSet As New DsRelHistorico

            Try
                '1 passo: carregar os dados do relatório
                'abrindo conexão com o banco de dados
                oConn.ConnectionString = strConexao
                oConn.Open()

                'definindo o SQL
                strSQL.Append(" SELECT ")
                strSQL.Append("     NUM_FUNC, ")
                strSQL.Append("     MES, ")
                strSQL.Append("     ANO, ")
                strSQL.Append("     ATIVIDADE, ")
                strSQL.Append("     COORDENACAO, ")
                strSQL.Append("     QTDE_HORAS ")
                strSQL.Append(" FROM ")
                strSQL.Append("     HISTORICO ")

                Dim oDA As New SqlDataAdapter(strSQL.ToString, oConn)
                oDA.Fill(oDataSet, "RelHistorico")

                '2 passo: carregar o relatório
                Dim strPathreport As String = Server.MapPath("~\Relatorios\CRHistorico.rpt")
                crReportDocument.Load(strPathreport)


                '3 passo: definir o DataSource do relatório
                crReportDocument.SetDataSource(oDataSet)

                '4 passo: visualizar o relatório
                CRVHistorico.DisplayGroupTree = False
                CRVHistorico.HasCrystalLogo = False
                CRVHistorico.ReportSource = crReportDocument

            Catch ex As Exception
                System.Diagnostics.Debug.WriteLine(ex.Message)

            Finally

                'liberando os objetos
                oConn.Dispose()
                oDataSet.Dispose()

                oConn = Nothing
                oDataSet = Nothing

            End Try

        End Sub

     

    Obrigado

     

    quinta-feira, 16 de outubro de 2008 11:25
  •  

    Jessé,

     

    Eu tenho um exemplo mais simples para visualizar um relatório com Crystal Reports.

     

    Nesse exemplo eu utilizei o banco de dados ACCESS com Crystal Reports (vc precisa apenas alterar o provider do banco de dados).

     

    Referencias do Form:

    Code Snippet

     

    'provider do banco de dados ACCESS

    Imports System.Data.OleDb

    Imports System.Data

    'crystal reports

    Imports CrystalDecisions.CrystalReports.Engine

    Imports CrystalDecisions.Shared

    'outros

    Imports System.Text 'StringBuilder

    Imports System.Configuration 'ConnectionStrings

    Imports System.IO 'Path.Combine

     

     

     

    Sub:

     

    Code Snippet

    Private Sub PreviewRelClientes(ByVal oTable As DataTable)

    '

    'visualizar o relat¢rio "rptCustomer.rpt" utilizando a fun‡Æo CarregarListaClientes()

    '

    Try

    '1 passo: definindo o relat¢rio a ser visualizado (ReportPath)

    Dim crReportDocument As New rptCustomer

    '2 passo: definindo o DataSource do relat¢rio

    crReportDocument.SetDataSource(oTable)

    '3 passo: visualizando o relat¢rio...

    crPreview.DisplayGroupTree = False

    crPreview.ReportSource = crReportDocument

    Catch ex As Exception

    MsgBox(ex.Message)

    End Try

    End Sub

     

     

    Observe que estou retornando um DataTable que será utilizado para definir o DataSource do Relatório na sub PreviewRelClientes

     

    Code Snippet

    Private Function CarregarListaClientes() As DataTable

    'definindo a string de conexÆo do banco de dados

    Dim strConexao As String = _

    ConfigurationManager.ConnectionStrings("MSAccess").ToString

    Dim oConn As New OleDbConnection(strConexao)

    Dim strSQL As New StringBuilder

    Dim oTable As New DataTable()

    Dim oCmd As OleDbCommand = Nothing

    Try

    'abrindo conexÆo com o banco de dados.

    oConn.Open()

    'definindo o SQL

    strSQL.Append(" Select CustomerID ")

    strSQL.Append(" ,CustomerName")

    strSQL.Append(" ,Phone")

    strSQL.Append(" ,EmailAddress")

    strSQL.Append(" ,AddressLine")

    strSQL.Append(" ,City")

    strSQL.Append(" ,StateProvinceName")

    strSQL.Append(" ,PostalCode")

    strSQL.Append(" ,CountryName")

    strSQL.Append(" ,LastUpdate ")

    strSQL.Append(" FROM Customer inner join Country ")

    strSQL.Append(" on Customer.CountryID = Country.CountryID ")

    strSQL.Append(" Order by CountryName, CustomerName ")

    'carregando os dados do banco de dados

    Dim oDA As New OleDbDataAdapter(strSQL.ToString, oConn)

    oDA.Fill(oTable)

    Catch ex As Exception

    MsgBox(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oConn = Nothing

    End Try

    Return oTable

    End Function

     

     

    Para visualizar o relatório adicione a linha no evento Load da página

     

    Code Snippet

    PreviewRelClientes(CarregarListaClientes)

     

     

    [ ] 's

     

    Laércio.

    quinta-feira, 16 de outubro de 2008 13:31
    Moderador
  • Laércio agora o erro mudou:

     

    This group section cannot be printed because its condition field is nonexistent or invalid. Format the section to choose another condition field. Error in File C:\DOCUME~1\Adm\CONFIG~1\Temp\CRHistorico {D3F2F119-5D45-4244-94CD-1DE30F841871}.rpt: Invalid group condition.

     

    quinta-feira, 16 de outubro de 2008 14:54
  • Laércio, encontrei o erro, é que o campo no BD era num_func e no formulário do relatório (crhistorico.rpt) estava matricula.

     

    Obrigado novamente pela ajuda.

     

    quinta-feira, 16 de outubro de 2008 19:35