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 SubPrivate 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 SubPrivate Sub Form_Unload(Cancel As Integer)
    Set crxRelatorio = Nothing
    Set crxApp = Nothing
    ' Descarrega o Form
    frmCrystalViewer.Hide
    Unload Me
End SubAt,
                    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
                    
                
