REFERÊNCIA DE OBJETO NÃO DEFINIDA
Olá amigos,
Não consigo me entender com o CrystalReport. Já estou até estudando como se pode fazer relatórios em PDF para contornar meus problemas, o que seria uma pena dado a alta qualidade e recursos do Crystal.
Depois de superar algumas dificuldades, agora, quando executo o código abaixo, vem a seguinte mensagem:
“Referência de objeto não definida para uma instância de um objeto.â€
Imports System.Data.OleDb
Imports CrystalDecisions.CrystalReports.Engine
Dim Connect As New OleDbConnection
Connect.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;[Ô] _
& [Ô]Data Source=BdDados.accdb;Jet OLEDB:System database=system.mdw;[Ô]
Connect.Open()
Dim ds As New DataSet
Dim SQL As String = [Ô]SELECT * from tbl12[Ô]
Dim da As New OleDbDataAdapter(SQL, Connect)
da.Fill(ds)
Dim cr As New rpt07 ‘Relatório
cr.SetDataSource(ds)
Dim pth As String = System.Windows.Forms.Application.StartupPath & [Ô]pt07.rpt[Ô]
cr.Load(pth)
Dim ObjetoTexto As CrystalDecisions.CrystalReports.Engine.TextObject
ObjetoTexto = CType(cr.ReportDefinition.ReportObjects.Item([Ô]txtTitulo[Ô]), CrystalDecisions.CrystalReports.Engine.TextObject)
ObjetoTexto.Text = “Relação geralâ€
Me.crvRelatorio.ReportSource = cr ‘CrystalReportViewer
Me.crvRelatorio.RefreshReport()
cr.Close()
cr.Dispose()
Connect.Close()
O CrystalReportViewer exibe todos os registros, mas o erro aparece quando clico nos ShowPageNavigateButtons. Às vezes aparece, também, quando o Viewer é inicializado, mas ele exibe todos os registros, embora não possibilite a mudança de páginas.
Qual poderia ser o erro e qual seria a solução???
Não consigo me entender com o CrystalReport. Já estou até estudando como se pode fazer relatórios em PDF para contornar meus problemas, o que seria uma pena dado a alta qualidade e recursos do Crystal.
Depois de superar algumas dificuldades, agora, quando executo o código abaixo, vem a seguinte mensagem:
“Referência de objeto não definida para uma instância de um objeto.â€
Imports System.Data.OleDb
Imports CrystalDecisions.CrystalReports.Engine
Dim Connect As New OleDbConnection
Connect.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;[Ô] _
& [Ô]Data Source=BdDados.accdb;Jet OLEDB:System database=system.mdw;[Ô]
Connect.Open()
Dim ds As New DataSet
Dim SQL As String = [Ô]SELECT * from tbl12[Ô]
Dim da As New OleDbDataAdapter(SQL, Connect)
da.Fill(ds)
Dim cr As New rpt07 ‘Relatório
cr.SetDataSource(ds)
Dim pth As String = System.Windows.Forms.Application.StartupPath & [Ô]pt07.rpt[Ô]
cr.Load(pth)
Dim ObjetoTexto As CrystalDecisions.CrystalReports.Engine.TextObject
ObjetoTexto = CType(cr.ReportDefinition.ReportObjects.Item([Ô]txtTitulo[Ô]), CrystalDecisions.CrystalReports.Engine.TextObject)
ObjetoTexto.Text = “Relação geralâ€
Me.crvRelatorio.ReportSource = cr ‘CrystalReportViewer
Me.crvRelatorio.RefreshReport()
cr.Close()
cr.Dispose()
Connect.Close()
O CrystalReportViewer exibe todos os registros, mas o erro aparece quando clico nos ShowPageNavigateButtons. Às vezes aparece, também, quando o Viewer é inicializado, mas ele exibe todos os registros, embora não possibilite a mudança de páginas.
Qual poderia ser o erro e qual seria a solução???
Citação:Dim ObjetoTexto As CrystalDecisions.CrystalReports.Engine.TextObject
ObjetoTexto = CType(cr.ReportDefinition.ReportObjects.Item([Ô]txtTitulo[Ô]), CrystalDecisions.CrystalReports.Engine.TextObject)
ObjetoTexto.Text = “Relação geralâ€
Acredito que o problema esteja nesse código acima.
Dependendo da forma como vem chamando o seu relatório, em alguns casos, ele pode estar vazio. Dessa forma, na hora que você chama ObjetoTexto = CType(cr.ReportDefinition.ReportObjects.Item([Ô]txtTitulo[Ô]), CrystalDecisions.CrystalReports.Engine.TextObject), seu ObjetoTexto fica vazio. Sendo assim, acredito que a exceção seja disparada na seguinte linha de código: ObjetoTexto.Text = “Relação geralâ€
Prezado JABA,
Fiz um teste retirando as três linhas de código que capturam o tÃtulo do relatório. Contudo, a mensagem
“Referência de objeto não definida para uma instância de um objeto.†continua sendo emitida.
Não imagino qual seja o erro e qual seja a solução...
Fiz um teste retirando as três linhas de código que capturam o tÃtulo do relatório. Contudo, a mensagem
“Referência de objeto não definida para uma instância de um objeto.†continua sendo emitida.
Não imagino qual seja o erro e qual seja a solução...
Tira um print do código juntamente com a exceção e envia-nos por aqui para podermos ver em que linha isso ocorre.
Imports System.Data.OleDb
Imports CrystalDecisions.CrystalReports.Engine
Dim Connect As New OleDbConnection
Connect.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;[Ô] _
& [Ô]Data Source=BdDados.accdb;Jet OLEDB:System database=system.mdw;[Ô]
Connect.Open()
Dim ds As New DataSet
Dim SQL As String = [Ô]SELECT * from tbl12[Ô]
Dim da As New OleDbDataAdapter(SQL, Connect)
da.Fill(ds)
Dim cr As New rpt07 ‘Relatório
cr.SetDataSource(ds)
Dim pth As String = System.Windows.Forms.Application.StartupPath & [Ô]pt07.rpt[Ô]
cr.Load(pth)
Dim ObjetoTexto As CrystalDecisions.CrystalReports.Engine.TextObject
ObjetoTexto = CType(cr.ReportDefinition.ReportObjects.Item([Ô]txtTitulo[Ô]), CrystalDecisions.CrystalReports.Engine.TextObject)
ObjetoTexto.Text = “Relação geralâ€
Me.crvRelatorio.ReportSource = cr ‘CrystalReportViewer
Me.crvRelatorio.RefreshReport()
cr.Close()
cr.Dispose()
Connect.Close()
Imports CrystalDecisions.CrystalReports.Engine
Dim Connect As New OleDbConnection
Connect.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;[Ô] _
& [Ô]Data Source=BdDados.accdb;Jet OLEDB:System database=system.mdw;[Ô]
Connect.Open()
Dim ds As New DataSet
Dim SQL As String = [Ô]SELECT * from tbl12[Ô]
Dim da As New OleDbDataAdapter(SQL, Connect)
da.Fill(ds)
Dim cr As New rpt07 ‘Relatório
cr.SetDataSource(ds)
Dim pth As String = System.Windows.Forms.Application.StartupPath & [Ô]pt07.rpt[Ô]
cr.Load(pth)
Dim ObjetoTexto As CrystalDecisions.CrystalReports.Engine.TextObject
ObjetoTexto = CType(cr.ReportDefinition.ReportObjects.Item([Ô]txtTitulo[Ô]), CrystalDecisions.CrystalReports.Engine.TextObject)
ObjetoTexto.Text = “Relação geralâ€
Me.crvRelatorio.ReportSource = cr ‘CrystalReportViewer
Me.crvRelatorio.RefreshReport()
cr.Close()
cr.Dispose()
Connect.Close()
Tenta retirar essas duas linhas:
cr.Close()
cr.Dispose()
cr.Close()
cr.Dispose()
Caro DS2T,
Retirei as duas linhas indicadas e funcionou legal (No projeto).
Porém, depois de compilado e instalado com o Inno Setup, o Viewer exibe
apenas um relatório vazio. Os dados do banco não são mostrados.
Retirei as duas linhas indicadas e funcionou legal (No projeto).
Porém, depois de compilado e instalado com o Inno Setup, o Viewer exibe
apenas um relatório vazio. Os dados do banco não são mostrados.
Nunca trabalhei com Inno Setup, mas tudo indica, que sua string de conexão deve estar direcionando para um banco de dados vazio.
Uma forma simples de verificar é colocando caixas de mensagem e verificar o seu dataset, pra ver se tá preenchido.
Não parece ser um problema do Crystal.
Abraços!
Uma forma simples de verificar é colocando caixas de mensagem e verificar o seu dataset, pra ver se tá preenchido.
Não parece ser um problema do Crystal.
Abraços!
Prezado amigo,
Estou fazendo testes com um código do Macoratti que encontrei na rede, mas tudo indica que você está com razão: estou chegando à conclusão de que o problema está vinculado à conexão com o banco de dados. Estou certo de que não é uma questão com o Crystal Report.
Tão logo eu termine esses testes voltarei a postar. Até então manterei o tópico aberto.
Até lá...
Estou fazendo testes com um código do Macoratti que encontrei na rede, mas tudo indica que você está com razão: estou chegando à conclusão de que o problema está vinculado à conexão com o banco de dados. Estou certo de que não é uma questão com o Crystal Report.
Tão logo eu termine esses testes voltarei a postar. Até então manterei o tópico aberto.
Até lá...
Coloque um break point no inicio desse codigo que gera a exceção, execute o projeto e vá passando linha a linha com o F10. Quando a exceção for disparada, você saberá em que linha foi. Depois é só nos informar onde que foi.
Eu não gosto de usar esse crystal nativo do visual studio. Sempre achei mais amigável usar o Crystl32.OCX
Eu crio o RPT separadamente do visual studio (Com o crystal reports é claro!) e utilizo a OCX acima pra visualizar o RPT que criei.
Esta codificação abrirá outra janela com o relatório. Lembrando que na criação do relatório, você deve marcar a opção [Ô]Verify on Every Print[Ô] em DataBase e desmarcar a opção [Ô]Save With Report[Ô] em File.
Eu crio o RPT separadamente do visual studio (Com o crystal reports é claro!) e utilizo a OCX acima pra visualizar o RPT que criei.
[ô]define o local de seu Relatorio--------------------------------------------------------------
cr.ReportFileName = Application.StartupPath & [Ô]\SeuRelatorio.rpt[Ô]
[ô]Conecta seu relatorio ao banco
cr.Connect = [Ô]MS Access;pwd=startech[Ô] [ô]caso o banco não tenha senha desconsidere essa linha
cr.set_DataFiles(0, Application.StartupPath & [Ô]\SeuBanco.mdb[Ô])
[ô]subreport (Caso exista)------------------------------------------------------------------------
cr.SubreportToChange = [Ô]itens[Ô]
cr.set_DataFiles(0, Application.StartupPath & [Ô]\Banco\Dados.mdb[Ô])
cr.Connect = [Ô]MS Access;pwd=startech[Ô]
cr.SubreportToChange = [Ô][Ô]
[ô]fim subreport------------------------------------------------------------------------------------
cr.SelectionFormula = [Ô]{TabelaBanco.CampoBanco} = [Ô] & valorAbuscar
cr.Action = 1
Esta codificação abrirá outra janela com o relatório. Lembrando que na criação do relatório, você deve marcar a opção [Ô]Verify on Every Print[Ô] em DataBase e desmarcar a opção [Ô]Save With Report[Ô] em File.
Tópico encerrado , respostas não são mais permitidas