CRYSTALREPORT - RELATÓRIO ABRINDO APENAS UMA VEZ
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
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
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
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.
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
Muito obrigada JABA, funcionou!!
Tópico encerrado , respostas não são mais permitidas