Usuário com melhor resposta
Erro na geração do relatório em Crystal

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,
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.OleDbImports
System.Data'crystal reports
Imports
CrystalDecisions.CrystalReports.EngineImports
CrystalDecisions.Shared'outros
Imports
System.Text 'StringBuilderImports
System.Configuration 'ConnectionStringsImports
System.IO 'Path.CombineSub:
Code SnippetPrivate 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¢riocrReportDocument.SetDataSource(oTable)
'3 passo: visualizando o relat¢rio...crPreview.DisplayGroupTree =
FalsecrPreview.ReportSource = crReportDocument
Catch ex As ExceptionMsgBox(ex.Message)
End Try End SubObserve que estou retornando um DataTable que será utilizado para definir o DataSource do Relatório na sub PreviewRelClientes
Code SnippetPrivate 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 SQLstrSQL.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 ExceptionMsgBox(ex.Message)
Finally 'liberando os objetosoConn.Dispose()
oConn =
Nothing End Try Return oTable End FunctionPara visualizar o relatório adicione a linha no evento Load da página
Code SnippetPreviewRelClientes(CarregarListaClientes)
[ ] 's
Laércio.
Todas as Respostas
-
Olá Jessé,
Você está passando um DataSet ou DataTable no DataSource do Relatório?
Exemplo (Utilizando DataSet) :
Code Snippetassim dá errro:
report.SetDataSource(dsRelatorio);Assim funciona
report.SetDataSource(dsRelatorio.Tables(0))[ ]'s
Laércio.
-
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 DsRelHistoricoTry
'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 = crReportDocumentCatch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message)Finally
'liberando os objetos
oConn.Dispose()
oDataSet.Dispose()oConn = Nothing
oDataSet = NothingEnd Try
End Sub
Obrigado
-
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.OleDbImports
System.Data'crystal reports
Imports
CrystalDecisions.CrystalReports.EngineImports
CrystalDecisions.Shared'outros
Imports
System.Text 'StringBuilderImports
System.Configuration 'ConnectionStringsImports
System.IO 'Path.CombineSub:
Code SnippetPrivate 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¢riocrReportDocument.SetDataSource(oTable)
'3 passo: visualizando o relat¢rio...crPreview.DisplayGroupTree =
FalsecrPreview.ReportSource = crReportDocument
Catch ex As ExceptionMsgBox(ex.Message)
End Try End SubObserve que estou retornando um DataTable que será utilizado para definir o DataSource do Relatório na sub PreviewRelClientes
Code SnippetPrivate 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 SQLstrSQL.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 ExceptionMsgBox(ex.Message)
Finally 'liberando os objetosoConn.Dispose()
oConn =
Nothing End Try Return oTable End FunctionPara visualizar o relatório adicione a linha no evento Load da página
Code SnippetPreviewRelClientes(CarregarListaClientes)
[ ] 's
Laércio.
-
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.
-