none
Trocar base de dados no Crystal RRS feed

  • Pergunta

  • Eaee povo. Seguinte, estou com problemas pra trocar a base de dados de relatórios em run time. tenho o seguinte código:

    Dim CRXApplication As New CRAXDDRT.Application
    Set CRXApplication = CreateObject("CrystalRuntime.Application.11")
    Dim CRXReport As New CRAXDDRT.Report
    Dim CRXDatabase As CRAXDDRT.Database
    Dim wcaminho As String
    wcaminho = "P:\" & gInstituicao & "\report\" & grelatorio & ".rpt"
    Set CRXReport = CRXApplication.OpenReport(wcaminho, 0)
    CRXReport.RecordSelectionFormula = selecao
    CrystalActiveXReportViewer1.ReportSource = CRXReport
    CrystalActiveXReportViewer1.ViewReport

    O que acontece é que o relatório sempre abre com a base de dados que está nele. Não consigo trocar em run time.  Eu preciso apenas passar o caminho do banco de dados pro rpt.

    Se alguem puder ajudar eu agradeço.


    obs.: uso vb6(sp6), windows 7 e Crystal XI
    []'s
    aLEX
    quinta-feira, 4 de março de 2010 15:24

Respostas

  • Srs, resolvi o problema e posto aqui para futuras dúvidas. Segue o código:

    Dim CRXApplication As New CRAXDDRT.Application
    Set CRXApplication = CreateObject("CrystalRuntime.Application.11")
    Dim CRXReport As New CRAXDDRT.Report
    Dim CRXDatabase As CRAXDDRT.Database
    
    Set CRXReport = CRXApplication.OpenReport(Mid(gCaminho, 1, 11) & "\REPORT\etqCodbar.rpt", 0)
    CRXReport.RecordSelectionFormula = selecao
    Set CRXDatabase = CRXReport.Database
    
    CRXDatabase.Tables(1).Location = "C:\banco.mdb" 'essa linha resolveu meu problema
    ReportViewer1.ReportSource = CRXReport ReportViewer1.ViewReport
    Obrigado a todos pelas sugestões
    []s
    sexta-feira, 12 de março de 2010 14:20

Todas as Respostas

  • Alex,

    Já tentou utilizar o método SetDataSource?

    http://www.thescarms.com/dotnet/CrystalRptViewer.aspx


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 4 de março de 2010 16:47
    Moderador
  • Ja vi alguma coisa a respeito sim. O problema é que os relatórios tem muitas tabelas. Não queria ter que abrir uma conexão e montar uma query imensa, entende?
    Antigamente qd eu usava o crystal 8.5 era bem simples. Algo assim

    objReport.DataFiles(0) = "C:\banco.mdb

    Ou seja, ele mudava a base de dados, que no meu caso é access, no próprio relatório, em run time, sem eu precisar de fazer qq tipo de conexão no meu código.

    Nesse CrystalActiveXReportViewer eu nao to conseguindo fazer isso.
    De qq forma obrigado pela resposta. E se alguem tiver alguma outra idéia agradeço.

    []'s
    quinta-feira, 4 de março de 2010 17:27
  • Alexandre,

    Olha esse código. Eu faço assim:

    Dim report  as ReportDocument =

    new ReportTest()

    Dim atualizar  as Boolean = false

    Dim newServerName  as String = ".\SQLEXPRESS"
    Dim newDatabaseName  as String = "DataBase"
    Dim userID  as String = "usuario"
    Dim password  as String = "senha"

    For Each  connection  as IConnectionInfo  In connect

    ' Verifica diferença de Servidor
    If String.Compare(connection.ServerName, newServerName, true) != 0 Then

    atualizar = True

    End If

    ' Verifica diferença de Banco de Dados
    If  String.Compare(connection.DatabaseName, newDatabaseName, true) != 0 Then

    atualizar = True

    End If

    ' Verifica diferença de Usuário
    If  String.Compare(connection.UserID, userID, true) != 0 Then

    atualizar = True

    End If

    ' Verifica diferença de senha
    If  String.Compare(connection.Password, password, true) != 0 Then

    atualizar = True

    End If

    ' Se há diferenças entre as credenciais do report e as do ambiente de produção atualiza...
    If  atualizar = True Then

    connect(connection.ServerName, connection.DatabaseName).SetConnection(newServerName, newDatabaseName, userID, password)

    End If

    Next

    Caso der algum problema é só falar

    Samuel


    Samuel Fabel
    quinta-feira, 4 de março de 2010 18:58
  • Olá Samuel, nao entendi a sua sugestão, mas de qq forma obrigado.

    Veja bem, eu nao tenho problemas em criar uma conexao ou coisa do tipo. O que eu preciso é saber como mudar o datasource do relatório em tempo de execução usando report viewer(veja código acima).

    obs.: uso vb6(sp6), windows 7 e Crystal XI
    []'s
    sexta-feira, 5 de março de 2010 13:01
  • Alexandre,

    Desculpa minha confusão, pois não vi seu obs...

    Você pode referenciar no report, uma Consulta ao invez de uma tabela?
    Se sim, poderia olhar por este lado e fazer uma consulta com parametros para filtrar os dados.

    Samuel
    Samuel Fabel
    sexta-feira, 5 de março de 2010 17:23
  • Srs, resolvi o problema e posto aqui para futuras dúvidas. Segue o código:

    Dim CRXApplication As New CRAXDDRT.Application
    Set CRXApplication = CreateObject("CrystalRuntime.Application.11")
    Dim CRXReport As New CRAXDDRT.Report
    Dim CRXDatabase As CRAXDDRT.Database
    
    Set CRXReport = CRXApplication.OpenReport(Mid(gCaminho, 1, 11) & "\REPORT\etqCodbar.rpt", 0)
    CRXReport.RecordSelectionFormula = selecao
    Set CRXDatabase = CRXReport.Database
    
    CRXDatabase.Tables(1).Location = "C:\banco.mdb" 'essa linha resolveu meu problema
    ReportViewer1.ReportSource = CRXReport ReportViewer1.ViewReport
    Obrigado a todos pelas sugestões
    []s
    sexta-feira, 12 de março de 2010 14:20