REFERÊNCIA DE OBJETO NÃO DEFINIDA

ABREU 12/03/2016 18:20:23
#459061
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???
JABA 13/03/2016 18:12:33
#459086
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”
ABREU 13/03/2016 19:05:47
#459090
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...
JABA 13/03/2016 19:14:04
#459091
Tira um print do código juntamente com a exceção e envia-nos por aqui para podermos ver em que linha isso ocorre.
ABREU 13/03/2016 20:39:53
#459103
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()
DS2T 13/03/2016 23:16:17
#459108
Tenta retirar essas duas linhas:

cr.Close()
cr.Dispose()
ABREU 14/03/2016 06:03:09
#459109
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.
DS2T 14/03/2016 19:06:15
#459168
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!
ABREU 14/03/2016 21:23:10
#459186
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á...
JABA 14/03/2016 21:39:09
#459187
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.
ACCIOLLY 15/03/2016 08:58:38
#459210
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.

[ô]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.
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas