CRYSTALREPORT - RELATÓRIO ABRINDO APENAS UMA VEZ

KELLY 05/06/2016 20:34:03
#463076
Olá, boa noite a todos!

Estou com um probleminha no meu código. Ao chamar o relatório a primeira vez ele abre normalmente, mas se eu fechar o formulário que contém o relatório e chamar o relatório novamente o relatório aparece em branco. Os dados do relatório só carregam novamente se eu fechar toda a aplicação. Onde está o meu erro?

Option Explicit

Public cn As ADODB.Connection
Public rs As ADODB.Recordset

Sub main()

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

cn.ConnectionString = [Ô]Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=dbProducts;Data Source=(local)[Ô]
cn.Open
frmMainReport.Show

End Sub

Option Explicit

Private Sub Form_Initialize()
Dim oapp As CRAXDDRT.Application
Dim oreport As CRAXDDRT.Report

rs.Open [Ô]SELECT * FROM Production.Product[Ô], cn, adOpenKeyset, adLockOptimistic

Set oapp = New CRAXDDRT.Application
Set oreport = oapp.OpenReport(App.Path & [Ô]\Report1.rpt[Ô], 1)
oreport.Database.SetDataSource rs, 3, 1

CRViewer1.ReportSource = oreport
CRViewer1.ViewReport
End Sub

Private Sub Form_Resize()
With CRViewer1
.Width = frmReport.Width
.Height = frmReport.Height - 200
End With
End Sub


JABA 05/06/2016 20:57:38
#463077
Resposta escolhida
Coloque o seu código dentro do evento Form_Load() ou Form_Activate() em vez do evento Form_Initialize

[txt-color=#e80000]Private Sub Form_Load()[/txt-color]
Dim oapp As CRAXDDRT.Application
Dim oreport As CRAXDDRT.Report

rs.Open [Ô]SELECT * FROM Production.Product[Ô], cn, adOpenKeyset, adLockOptimistic

Set oapp = New CRAXDDRT.Application
Set oreport = oapp.OpenReport(App.Path & [Ô]\Report1.rpt[Ô], 1)
oreport.Database.SetDataSource rs, 3, 1

CRViewer1.ReportSource = oreport
CRViewer1.ViewReport
End Sub

KELLY 05/06/2016 21:31:56
#463079
Citação:

:
Coloque o seu código dentro do evento Form_Load() ou Form_Activate() em vez do evento Form_Initialize

[txt-color=#e80000]Private Sub Form_Load()[/txt-color]
Dim oapp As CRAXDDRT.Application
Dim oreport As CRAXDDRT.Report

rs.Open [Ô]SELECT * FROM Production.Product[Ô], cn, adOpenKeyset, adLockOptimistic

Set oapp = New CRAXDDRT.Application
Set oreport = oapp.OpenReport(App.Path & [Ô]Report1.rpt[Ô], 1)
oreport.Database.SetDataSource rs, 3, 1

CRViewer1.ReportSource = oreport
CRViewer1.ViewReport
End Sub



JABA, fiz assim:

Option Explicit

Private Sub Form_Load()
Dim CryApp As CRAXDDRT.Application
Dim CryResp As CRAXDDRT.Report

rs.Open [Ô]SELECT * FROM Production.Product[Ô], cn, adOpenKeyset, adLockOptimistic

Set CryApp = New CRAXDDRT.Application
Set CryResp = CryApp.OpenReport(App.Path & [Ô]\Report1.rpt[Ô], 1)
CryResp.Database.SetDataSource rs, 3, 1

CRViewer1.ReportSource = CryResp
CRViewer1.ViewReport
End Sub

Private Sub Form_Resize()
With CRViewer1
.Width = frmReport.Width
.Height = frmReport.Height - 200
End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
If rs.State = 1 Then rs.Close
If cn.State = 1 Then cn.Close
End Sub

Mas agora está dando o seguinte erro na linha que eu indiquei em negrito quando abro a segunda vez o relatório: The connection cannot be used to perform this operation. It is either closed or invalid in this context.
JABA 05/06/2016 21:55:03
#463081
Você terá que reabrir a conexão novamente, já que ele foi fechada.

Sub main()

Set cn = New ADODB.Connection

Set rs = New ADODB.Recordset

cn.ConnectionString = [Ô]Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=dbProducts;Data Source=(local)[Ô]
cn.Open

[ô]frmMainReport.Show [ô]Retire esse código daqui. Execute-o quando for realmente chamar o form

End Sub


Private Sub Form_Load()

[txt-color=#e80000]main()[/txt-color] [ô]conecta o banco

Dim CryApp As CRAXDDRT.Application
Dim CryResp As CRAXDDRT.Report

rs.Open [Ô]SELECT * FROM Production.Product[Ô], cn, adOpenKeyset, adLockOptimistic

Set CryApp = New CRAXDDRT.Application
Set CryResp = CryApp.OpenReport(App.Path & [Ô]\Report1.rpt[Ô], 1)
CryResp.Database.SetDataSource rs, 3, 1

CRViewer1.ReportSource = CryResp
CRViewer1.ViewReport

End Sub

KELLY 05/06/2016 22:27:28
#463085
Muito obrigada JABA, funcionou!!

Tópico encerrado , respostas não são mais permitidas