VB - CRYSTAL
Boa tarde...
criei um relatório no Crystal 9 sem um datasource setado...
após isso tentei passar um recordset como datasource:
Dim rCrApplication As New CRAXDDRT.Application
Dim rCrReport As CRAXDDRT.Report
Set rCrReport = rCrApplication.OpenReport("C: estecr9.rpt")
rs.Open "Select nome_pessoa, codigo FROM cad_Cliente where Codigo < 100", BdContas, dOpenForwardOnly, adLockReadOnly
If Not rs.EOF Then
rCrReport.Database.SetDataSource rs
End If
Crystal.ReportSource = rCrReport
Crystal.ViewReport
só que está dando um erro: subscript out of range
então qd eu adiciono um datasource no relatório e tento passar o recordset não acontece mais o erro
gostaria de saber se tem que criar o relatorio com um datasource diferente ou sem um datasource
como posso fazer isso......?
obrigado
criei um relatório no Crystal 9 sem um datasource setado...
após isso tentei passar um recordset como datasource:
Dim rCrApplication As New CRAXDDRT.Application
Dim rCrReport As CRAXDDRT.Report
Set rCrReport = rCrApplication.OpenReport("C: estecr9.rpt")
rs.Open "Select nome_pessoa, codigo FROM cad_Cliente where Codigo < 100", BdContas, dOpenForwardOnly, adLockReadOnly
If Not rs.EOF Then
rCrReport.Database.SetDataSource rs
End If
Crystal.ReportSource = rCrReport
Crystal.ViewReport
só que está dando um erro: subscript out of range
então qd eu adiciono um datasource no relatório e tento passar o recordset não acontece mais o erro
gostaria de saber se tem que criar o relatorio com um datasource diferente ou sem um datasource
como posso fazer isso......?
obrigado
Eu uso RDC com o CR9 (Active X).
Eu coloco um form no projeto VB com nome: frmCrystalViewer
Uso também o RPT externo.
No RPT está a referência ao BD que será usado no Relatório.
Já no projeto VB eu passo o CAMINHO do BD que será usado para gerar o Relatório. Isso resolve o problema, ou seja, vc tem um BD de testes para crir e testar o RPT (cujo caminho está gravado junto com o RPT) e tem o BD de produção cujo caminho é passado em tempo de execução do seu programa VB.
Segue o código do frmCrytalViewer
Option Explicit
' Crystal Reports Aplicacao
Dim crxApp As New CRAXDRT.Application
' Crystal Reports Relatorio
Dim crxRelatorio As CRAXDRT.Report
At,
Eu coloco um form no projeto VB com nome: frmCrystalViewer
Uso também o RPT externo.
No RPT está a referência ao BD que será usado no Relatório.
Já no projeto VB eu passo o CAMINHO do BD que será usado para gerar o Relatório. Isso resolve o problema, ou seja, vc tem um BD de testes para crir e testar o RPT (cujo caminho está gravado junto com o RPT) e tem o BD de produção cujo caminho é passado em tempo de execução do seu programa VB.
Segue o código do frmCrytalViewer
Option Explicit
' Crystal Reports Aplicacao
Dim crxApp As New CRAXDRT.Application
' Crystal Reports Relatorio
Dim crxRelatorio As CRAXDRT.Report
Private Sub Form_Load()
' Mouse Com Ampuleta durante Preparo do Relatorio
Screen.MousePointer = vbHourglass
' Cria o Objeto "Crystal Reports Application"
Set crxApp = CreateObject("CrystalRuntime.Application")
' Cria o Objeto Report
' Usando o Metodo ".OpenReport" do Objeto "Crystal Reports Application"
' Abre o Relatorio Externo .RPT passando caminho e nome do arquivo
Set crxRelatorio = crxApp.OpenReport(strCaminhoRPTs & "\" & strNomeRelatorioRPT)
' ReDefine Localizacao no BD no RPT
crxRelatorio.Database.Tables(1).Location = strCaminhoBD & "\" & strNomeBD
' Descarta dados salvos no arquivo RPT se for o caso
' Assegura que o Relatorio sera impresso com dados NOVOS de acordo com o RecordSet passado
crxRelatorio.DiscardSavedData
' Aplica FILTRO SQL - Nao Suportado por DAO DataBase
crxRelatorio.SQLQueryString = strSQL
' Criar objeto ADO RecordSet
Set rstRelatorio = New ADODB.Recordset
' Abre ADO RecordSet de acordo com comando SQL passado - strSQL
rstRelatorio.Open strSQL, cnCeramica, adOpenStatic, adLockReadOnly
' Passa RecordSet para o Relatorio RPT
crxRelatorio.Database.SetDataSource rstRelatorio
' Passa Titulo do Relatorio para o arquivo RPT
crxRelatorio.ReportTitle = strTituloRel
' Passao o RecordSet (ReportSource) para o Controle "CrViewer" e Mostra Relatorio
crxViewer.ReportSource = crxRelatorio
crxViewer.ViewReport
' Abre Relatorio em formato Tela Cheia
frmCrystalViewer.WindowState = vbMaximized
' Loop Enquanto o Relatorio eh Visualizado pelo Usuario
' Usando "DoEvents" permite que o Sistema Operacional tenha
' Controle durante a Visualizacao do Relatorio
While crxViewer.IsBusy
DoEvents
Wend
' Mostra Relatorio com 100% de Zoom
crxViewer.Zoom 100
Screen.MousePointer = vbDefault
End Sub
Private Sub Form_Resize()
' Ajusta o "CrViewer" no form quando tamanho eh alterado
crxViewer.Top = 0
crxViewer.Left = 0
crxViewer.Height = ScaleHeight
crxViewer.Width = ScaleWidth
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set crxRelatorio = Nothing
Set crxApp = Nothing
' Descarrega o Form
frmCrystalViewer.Hide
Unload Me
End Sub
At,
certo...
ainda tenho algumas dúvidas...
entao, para eu poder passar um recordset como datasource para o relatório, eu necessariamente devo setar um database para o relatório qd o crio?
eu quero fazer uma tela que seja genérica para visualização de relatórios....
eu queria saber se tem como criar um relatório sem database, inserir campos nele e depois passar um recordset como datasource contendo o que seria o database do relatório, entende?
mais uma vez, mto orbigado....
ainda tenho algumas dúvidas...
entao, para eu poder passar um recordset como datasource para o relatório, eu necessariamente devo setar um database para o relatório qd o crio?
eu quero fazer uma tela que seja genérica para visualização de relatórios....
eu queria saber se tem como criar um relatório sem database, inserir campos nele e depois passar um recordset como datasource contendo o que seria o database do relatório, entende?
mais uma vez, mto orbigado....
Tópico encerrado , respostas não são mais permitidas