André Alves de Lima

Talking about Software Development and more…

Como distribuir aplicações com o Report Viewer?

Imagina que você passou um tempão desenvolvendo o seu aplicativo e gastou dias e dias desenvolvendo seus relatórios no Report Viewer. Aí você chega para instalar a aplicação no computador do cliente e ela não funciona por causa do Report Viewer?

Pois bem, como você já deve saber, o Report Viewer não é parte integrada do .NET Framework. Dessa forma, ele precisa ser instalado juntamente com a sua aplicação. Para isso, existem algumas opções. Neste artigo veremos como distribuir aplicações com o Report Viewer.

Se você utiliza o controle do Report Viewer na sua aplicação, caso ele não esteja instalado no computador cliente, você provavelmente receberá um erro parecido com este:

Neste artigo veremos três maneiras de distribuirmos o controle do Report Viewer: instalando o Report Viewer Redistributable manualmente (ou automaticamente de forma silenciosa), copiando as dlls necessárias no diretório da aplicação ou publicando o aplicativo através do ClickOnce.

Instalando o Report Viewer Redistributable

O Report Viewer Redistributable (também conhecido como “runtime“) é um instalador à parte que serve para fazer a distribuição dos controles do Report Viewer. Essa é a mesma runtime que temos que instalar para utilizar o Report Viewer no Visual Studio Express. A runtime do Report Viewer está disponível para download no site da Microsoft e você deve baixar a versão correspondente com o seu Visual Studio. Por exemplo, este é o link para a runtime do Report Viewer 2015.

A runtime do Report Viewer pode ser instalada manualmente ou integrada a um outro tipo de instalador. Uns tempos atrás eu mostrei como criar instaladores para aplicativos .NET. Você poderia integrar a instalação silenciosa da runtime do Report Viewer em todas as três ferramentas demonstradas naquele artigo. Para isso, basta utilizar a seguinte linha de comando:

ReportViewer.exe /q:a /c:"install.exe /q"

Com essa linha de comando, o instalador da runtime do Report Viewer será executado, os controles do Report Viewer serão instalados e tudo isso sem que o usuário nem perceba (tudo de forma silenciosa).

Copiando as dlls necessárias no diretório da aplicação

Algumas vezes não temos a possibilidade de criarmos instaladores para os nossos aplicativos e queremos copiar somente os arquivos necessários para a aplicação no computador cliente. Mas, como é que fazemos no caso da aplicação utilizar o Report Viewer como ferramenta de relatórios?

Por sorte, todas as funcionalidades do Report Viewer estão centralizadas em algumas poucas dlls (não é à toa que a runtime do Report Viewer 2015 tem somente 8.9Mb). Dessa forma, a única coisa que precisamos saber é quais dlls são necessárias ao Report Viewer e onde elas estão localizadas, de forma que consigamos copiá-las do computador onde desenvolvemos o aplicativo para o computador onde a aplicação será executada.

As dlls utilizadas pelo Report Viewer são:

– Microsoft.ReportViewer.Common.dll
– Microsoft.ReportViewer.WinForms.dll
– Microsoft.ReportViewer.ProcessingObjectModel.dll
– Microsoft.SqlServer.Types.dll

E onde é que elas estão localizadas? No GAC! Para acessarmos o GAC, abra a janela “executar” do Windows e digite o caminho “C:\Windows\Assembly\GAC_MSIL“):

Não tente navegar até essa pasta pelo Windows Explorer porque não funcionará. Você tem que abri-la a partir da tela “executar” para realmente conseguir explorar o seu conteúdo. Dentro do GAC_MSIL, encontre as pastas referentes a cada uma das dlls listadas acima como, por exemplo, a pasta “Microsoft.ReportViewer.Common“:

Dentro dessa pasta, você encontrará cada uma das versões dessa dll que você tem instalada no seu computador. No meu caso, por exemplo, eu tenho as versões 10, 11 e 12:

Você precisa copiar a dll da versão que você está utilizando na sua aplicação. Para descobrir qual é a versão correta, vá até as referências do projeto, clique em uma das referências do Report Viewer e confira o item “Version” na janela de propriedades:

Basta repetir esse processo para cada uma das dlls listadas anteriormente, copiá-las para o diretório da aplicação no computador cliente e pronto! Seus relatórios funcionarão normalmente.

Publicando o aplicativo através do ClickOnce

Outra ferramenta muito utilizada na instalação de aplicações desktop é o ClickOnce. Essa opção está disponível em todas as edições do Visual Studio através da aba “Publicar” das propriedades do projeto:

A distribuição do Report Viewer pelo ClickOnce é extremamente simples, basta configurarmos o Report Viewer como pré-requisito da aplicação nas propriedades do ClickOnce. Para isso, clique no botão “Prerequisites” e marque a opção “Microsoft Report Viewer 2012 Runtime“:

Feito isso, o mecanismo do ClickOnce automaticamente baixará a runtime do Report Viewer e instalará juntamente com a aplicação.

Qual metodologia utilizar?

Sem sombra de dúvidas, a opção mais simples de todas é instalar manualmente a runtime no computador onde o aplicativo será executado (ou no servidor, caso você esteja lidando com um website ASP.NET). Porém, temos que lembrar que a primeira impressão do nosso sistema é a que fica, e pedir para que o usuário instale manualmente a runtime do Report Viewer com certeza não causará uma primeira boa impressão.

A alternativa mais profissional é realizar a instalação silenciosa da runtime durante o processo de instalação do aplicativo. Essa é a maneira mais fácil (e profissional) de fazer a instalação do Report Viewer. Se você estiver utilizando um instalador para distribuir a sua aplicação, nem pense duas vezes e utilize essa sistemática para distribuir o Report Viewer.

Quanto à opção de copiar os arquivos diretamente no diretório da aplicação, a vantagem é que esse tipo de distribuição é muito simples. Basta copiarmos esses arquivos em uma pasta no computador destino e a aplicação funcionará sem maiores problemas. A desvantagem é que ela não é nada profissional, uma vez que fazer com que o seu cliente copie arquivos de um lado para o outro definitivamente não causará uma boa impressão. Uma alternativa muito interessante é mesclarmos essa técnica com a utilização de um instalador (ou até mesmo um self-extract do WinRAR).

Por fim, a opção do ClickOnce também é muito simples no que diz respeito à distribuição do Report Viewer. Basta marcarmos uma caixa e tudo estará pronto. Porém, nesse caso temos a desvantagem que o ClickOnce demanda uma certa infraestrutura, uma vez que o pacote de distribuição deverá ser publicado em algum servidor IIS ou na rede local, e essa não é uma tarefa muito trivial. Além disso, os aplicativos instalados pelo ClickOnce não são armazenados na pasta “Arquivos de Programas” e não é possível escolhermos o seu local de instalação. Isso pode trazer problemas caso você esteja esperando que o aplicativo seja instalado em uma pasta específica ou dentro da pasta “Arquivos de Programas“.

Concluindo

Neste artigo você conferiu três possibilidades para distribuir as suas aplicações que utilizam o controle do Report Viewer. Além disso, vimos também as vantagens e desvantagens de cada uma dessas modalidades.

E você, já precisou distribuir o Report Viewer para os seus clientes? Qual opção de distribuição você utilizou? Conte-nos na caixa de comentários como é que foram as suas experiências.

Por fim, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas “bônus” que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.

Até a próxima!

André Lima

Photo by Peter Shanks used under Creative Commons
https://www.flickr.com/photos/botheredbybees/1426877411

Newsletter do André Lima

* indicates required



Powered by MailChimp

53 thoughts on “Como distribuir aplicações com o Report Viewer?

  • Joel Rodrigues disse:

    Excelente artigo, André. Parabéns.

  • Edward Gómez disse:

    Como siempre muy buen post, muy bien explicado.

    Gracias por compartir saludos desde Colombia.

  • Edson Passos disse:

    André Bom dia!
    Parabéns pelo post,andava quebrando a cabeça com a instalação do report na hora de distribuir os aplicativos e com a dica das dlls o problema foi solucionado.

    Seu trabalho tem sido de grande valia para o meu aperfeiçoamento profissional, sobretudo por não ser da área TI.

    Obrigado!

    • andrealveslima disse:

      Maravilha, Edson! Fico feliz que o artigo tenha te ajudado a resolver o seu problema de deployment do Report Viewer.. Como eu disse na minha outra resposta, se surgir alguma outra dúvida, é só entrar em contato!

      Ah, e muito obrigado pelo elogio!

      Um grande abraço!
      André Lima

  • Leonardo Michalak disse:

    Excelente, André.
    Obrigado por mais este artigo, que mais uma vez me tirou do sufoco. Eu devo muito a você pois o que aprendi até o momento sobre Report Viewer, foi graças aos seus artigos.

    OBrigado.

    • andrealveslima disse:

      Olá Leonardo, muito obrigado pelo comentário! Fico muito feliz por você ter gostado desse artigo e por ter conseguido te ajudar de alguma forma com os outros artigos! Se tiver alguma dúvida é só entrar em contato..

      Abraço!
      André Lima

  • Carlos Sousa disse:

    Muito obrigado, ficou tudo mais claro após ler esta matéria, após vários meses quebrando a cabeça consegui distribuir de forma eficiente o report.

    Informação clara e objetiva, parabéns.

    • andrealveslima disse:

      Olá Carlos, muito obrigado pelo comentário! Fico feliz que você tenha gostado do artigo e que ele tenha te ajudado no seu projeto..

      Abraço!
      André Lima

  • JULIO SARDENBERG disse:

    Resolveu 100 % do meu problema!
    Obrigado!

  • Nelson A. Sousa disse:

    Olá André,
    Parabéns pelo artigo!
    Tenho uma dúvida, as dlls do ReportViewer aparecem na lista “Application Files”, certo?
    No meu caso eu apenas mudei o status “Publish Status” para INCLUDE, e, deixei desmarcado o download do runtime na aba Pré_Requisitos.
    Assim as dlls são copiadas para a pasta de instalação do meu sistema e registradas.
    Tem funcionado, mas é correto?
    Acho que do modo que fiz, fica igual à opção que você deu acima de copiar as dlls, é isso?
    Ahh, esqueci de dizer que uso o ClickOnce

    • andrealveslima disse:

      Olá Nelson, muito obrigado pelo comentário!

      Sim, essa alternativa que você utilizou com o ClickOnce é análoga a copiar as dlls no diretório da aplicação.. Não vejo problema nenhum em fazer dessa forma que você fez.. Aliás, nas versões mais novas do Report Viewer só vai dar para fazer desse jeito, uma vez que (até onde eu sei), não existirá mais runtime..

      Abraço!
      André Lima

      • Andre Luiz Quintanilha disse:

        Boa noite amigos! Nelson você resolveu um problemão pra mim. Nem sempre o cliente estava com link de internet apropriado para baixar o runtime do Report falhando a instalação, forçando a instalação manual do recurso. Testei sua alternativa e tive sucesso com a instalação “silenciosa”. Obrigado mesmo! :)

        -Vivendo e aprendendo, morrendo sem saber de nada…

  • Rogério Farias disse:

    Parabéns por este trabalho! Foi de grande importância para mim.

  • Fernando Henrique disse:

    Muito bom todo o conteúdo sobre reportViewer no seu site, me ajudou bastante a conseguir implementar relatórios, Parabéns pela iniciativa.

    • andrealveslima disse:

      Olá Fernando, muito obrigado pelo comentário! Fico feliz por ter conseguido ajudar.. Se pintar alguma dúvida aí, é só entrar em contato..

      Abraço!
      André Lima

  • Nascimento disse:

    Olá Andre Fis um instalador para minha aplicação, mas quando ele baixa o Report View e tenta instalar aparece esta mensagem: Para continua instale o
    Microssoft System CLR Types para SQL Server 2012 e execute a instalação novamente

    Já procurei esse Microssoft System CLR Types para SQL Server 2012 e nao encontrei o arquivo certo para funcionar. E eu não consigo instalar nem mesmo manualmente o report view. Baixei e instalei o report view 2010 mais não funcionou tambem estou usando o visual studio 2013 express.

    Se vc poder me dar uma ajudinha agradeço de mais.

    • andrealveslima disse:

      Olá Nascimento!

      Você já tentou utilizar a opção “Copiando as dlls necessárias no diretório da aplicação” que eu demonstrei no artigo? Você poderia simplesmente adicionar as dlls que eu mencionei no seu instalador e tudo deveria funcionar corretamente, sem ter que instalar runtime ou esses CLR types..

      Abraço!
      André Lima

      • Nascimento disse:

        Resolvi copiando as dll domreport vieww na versão do que foi desenvolvido direto no Assembly\GAC_MSIL“ do computador que recebe o sistema. A mensagem não apereceu mais e o sistema vai até o fim

        Obrigado e desculpa a demora em responder.

        • andrealveslima disse:

          Olá Nascimento!

          Estranho só ter funcionado ao copiar as dlls para o GAC.. Era para ter funcionado copiando somente para a pasta da aplicação.. Pelo menos comigo sempre funcionou..

          Mas, enfim, o importante é que você conseguiu resolver o problema.. :)

          Abraço!
          André Lima

    • Olá,
      Uma boa pedida é clicar com o botão direito em ‘References’, no Solution Explorer, e, escolher a opção ‘Manage nuget Pacakes’.
      Na janela que abrir clique em Browse, e procure a CLR Types na caixa de localizar.
      Entre as diversas opções escolha aquela que se adeque à versão do seu projeto, e efetue a instalação.

  • Nascimento disse:

    oi Andre estou distribuindo um sistema, quando tento entrar no sistema depois de instalado aparece esta mensagem.

    Cannot open database “nomedobanco” requested by the login. The login failed
    Login failed for user ‘Nascimento\Josedo nascimento’

    Minha estrutura de banco é essa:(localdb)\\MSSQLLocalDB(SQL Server 12.0.2000-NASCIMENTO\JoseDoNascimento)

    Default database location: C:\Users\JosédoNascimento\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB

    Minha string de conexão é essa: private static string conexao = @”Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=NovoBanco;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False “;

    Nos testes no visual studio 2013 quando rodo funciona tudo muito bem, mais quando instalo e rodo o sistema mesmo o sql server instalado na máquina aparece a mensagem especificada a cima

    Traduzindo para portugues : Não é possível abrir o banco de dados “NovoBanco” solicitado pelo login. O login falhou
    O login falhou para o usuário ‘Nascimento\Josedonascimento’

    Gostaria de saber se você sabe o que causa esse erro e se pode me ajudar.
    Obrigado. Fico aguardando sua resposta.

    PS: JÁ RESOLVIDO AQUI

    • Nascimento disse:

      Olá Andre, desculpa a confusão que fiz, A parte de report view eu resolvi, mais esse outro caso é Sql Server. Eu consigo instalar o aplicativo mais quando vou abrir-lo é que dar esse problema/mensagem acima.

      Obrigado

      • andrealveslima disse:

        Olá Nascimento!

        Sem problema.. Você colocou também o arquivo Microsoft.SqlServer.Types.dll no GAC? A mensagem de erro é relacionada a essa dll.. Confira qual é a versão que você colocou no GAC das dlls do Report Viewer e do SqlServer.Types..

        A propósito, você disse que está utilizando o Visual Studio 2013 Express, correto? Como é que você fez para adicionar o Report Viewer nessa edição (já que não existe suporte nativo para o Report Viewer no VS 2013 Express)? Você instalou a runtime do Report Viewer, não? Então, você precisa instalar a mesma runtime no computador onde a aplicação está sendo instalada..

        Abraço!
        André Lima

  • Valdemar Paulo disse:

    Boa noite Eng. Está explicação esta a ser muito útil pós estava com o mesmo problema vou seguir os passos apresentados neste link. Obrigado.

    • andrealveslima disse:

      Legal, Valdemar.. Obrigado pelo comentário! Fico feliz por ter conseguido ajudar.. Qualquer dificuldade é só entrar em contato..

      Abraço!
      André Lima

  • Valdemar Paulo disse:

    Estou com um problema instalei a aplicação na maquina cliente e estão em rede ate ali tudo bem, consigo aceder o aplicativo na rede bem como o banco de dados ok! Ao abrir o formulário do relatório do crystal reports ele apresenta-me isso:

    Longi no Banco de Dados

    Nome do Servidor: apresenta o Servidor definido na minha máquina

    Banco de Dados: nothing

    ID de Login: nothing

    Senha: nothing

    Usar Segurança Integrada

    Eu trabalhei com o Crystal Reports baixado para a versão Vb.10
    preciso uma luz, grato pela atenção.

  • Valdemar Paulo disse:

    Já tentei de tudo que sei e não estou a conseguir nada! Como disse tenho ela a funcionar a 100% na rede quando pretendo imprimir ali sim vem o quebra cabeça, fiz conforme orientas no tutorial a cima nada. tem dois erro quando trabalho com a Máquina Virtual da o seguinte erro: O inicializador de tipo de ‘CrrystalDecisions.ReportSourse.ReportSourseFactory’ adicionou uma exceçao.

    ja em tempo real da o seguinte erro:

    Longi no Banco de Dados

    Nome do Servidor: apresenta o Servidor definido na minha máquina

    Banco de Dados: nothing

    ID de Login: nothing

    Senha: nothing

    Usar Segurança Integrada

    • andrealveslima disse:

      Olá Valdemar!

      Esse artigo não tem absolutamente nada a ver com Crystal Reports.. Ele é relacionado a uma outra ferramenta de relatórios da Microsoft, chamada “Report Viewer”..

      A distribuição do Crystal Reports é diferente.. Você precisa instalar a runtime do Crystal Reports no computador onde a aplicação será executada.. Você já fez isso? Caso tenha feito, por favor, envie screenshots das mensagens de erro que você está recebendo (para conseguirmos ver a mensagem de erro exata)..

      Abraço!
      André Lima

      • Valdemar Paulo disse:

        Grato por responderes André!

        Eu já tenho ela instalada na referencia da aplicação que foi instalado na máquina cliente na hora de instalação ela também vai na máquina cliente, quando abro o formulário para gerar o relatório ele da a mensagem

        Longi no Banco de Dados

        Nome do Servidor: Apresenta o Servidor definido no meu computador onde criei o projecto

        Banco de Dados: nothing

        ID de Login: nothing

        Senha: nothing

        Usar Segurança Integrada

        • andrealveslima disse:

          Olá Valdemar!

          Uma coisa é a referência na aplicação, outra coisa é a instalação da runtime.. Você realmente instalou a runtime do Crystal Reports na máquina do cliente, ou você só distribuiu as dlls que estavam referenciadas no projeto? Você precisa instalar a runtime.. O Crystal não funciona somente distribuindo as dlls referenciadas junto com a aplicação..

          Outra pergunta: como é que está o código onde você exibe o relatório? Você já tentou criar um outro projeto bem simples, somente com um formulário e a exibição do relatório para ver se funciona no computador do cliente?

          Abraço!
          André Lima

          • Valdemar Paulo disse:

            Ola André!
            este é um dos código usado em um dos form que chama o CrystalReporterViwer:

            Try
            Dim reporterPropinas As New ReporterEntradaGeraldePropina
            reporterPropinas.SetParameterValue(“@codigo”, codigo)
            reporterPropinas.SetParameterValue(“@datainicial”, datainicial)
            reporterPropinas.SetParameterValue(“@datafinal”, datafinal)
            reporterPropinas.SetParameterValue(“@codLogotipoas”, codigo)

            CrystalReportViewer1.ReportSource = reporterPropinas

            Catch ex As Exception
            MsgBox(ex.Message)
            End Try
            ainda não fiz um similar, vou tentar…
            Mais analise o código grato!

          • andrealveslima disse:

            Olá Valdemar!

            E como você está passando os dados para o relatório? Se o seu relatório tem uma fonte de dados (que eu imagino que tenha), você tem que passar os dados para o relatório através do método “SetDataSource”.. Seria algo como:

            reporterPropinas.SetDataSource(DataSetComOsDadosDoRelatorio)
            

            Dê uma olhada neste meu artigo sobre exibição do conteúdo de um DataGridView no Crystal Reports, pode ser que te ajude a entender melhor:

            Imprimindo conteúdo do DataGridView no Crystal Reports

            Abraço!
            André Lima

  • Valdemar Paulo disse:

    Ola André! é mesmo isto verifiquei, fiz uma alteração no projeto a condicionei um relatório que dependia exclusiva mente do Dataset e na máquina cliente consegui imprimir, so que não tinha informação porem com este link acredito que tudo dará certo, muito grato pela ajuda…

  • Valdemar Paulo disse:

    Olá, André! Já consigo imprimir no Crystal Reports com um dataSet tipado usando o seguinte código:
    try

    ‘para a conexão
    Dim conex = New SqlConnection(ConfigurationManager.ConnectionStrings(“CONEXAO”).ConnectionString)
    conex.Open()
    Dim asn As Integer = “1” ‘ Para testar o código do paraméto que vou usar
    Dim dat As New SqlDataAdapter(“select*from AssinaturasEscolares1 where Codigo ='” & asn & “‘”, conex)
    Dim ds As New DataSet()

    dat.Fill(ds, “Assinaturas”)
    Dim rpAimprimi As New CrystalReport2
    rpAimprimi .SetDataSource(ds.Tables(“Assinaturas”))
    CrystalReportViewer1.ReportSource = rpAimprimi CrystalReportViewer1.Refresh()

    Catch ex As Exception
    MsgBox(ex.Message)
    End Try
    Porem encontro dificuldades para imprimir mais de uma tabela contida no único DataSet, pelo que eu percebi o DateSet só permite ter a visão global (Imprimir) uma única tabela, se estou errado, preciso de uma ajuda para ultrapassar mais uma vez está.
    Obrigado!

    • andrealveslima disse:

      Olá Valdemar!

      Nesse caso, você precisa passar o DataSet no método “SetDataSource”, e não a DataTable “Assinaturas”:

      rpAimprimi .SetDataSource(ds)
      

      Você já tentou dessa forma?

      Abraço!
      André Lima

  • Valdemar Paulo disse:

    Olá André! estava a fazer alguns testes, porem consigo imprimir na maquina cliente, não estou a trabalhar com o dataset, estou a trabalhar com proceduras, faço tudo na aplicação depois envio na procedura e ela direitinho para o reporters é uma das soluções que encontrei mais da bastante trabalho. fiz isto porque usei o rpAimprimir.SetDataSource(ds) conforme está no meu projecto e não tive sucesso, quando metia o nome da tabela imprimia limitada, usando o dataset saia relatório em branco o pior é que eu preciso muito imprimir o dataset.

    • andrealveslima disse:

      Olá Valdemar!

      Não entendi.. Você conseguiu resolver o problema? Caso não tenha conseguido, como é que está a situação atual do código que não está funcionando?

      Abraço!
      André Lima

      • Valdemar Paulo disse:

        Olá André!

        Eu não numa primeira fase diria que não, o que eu fiz foi criar um Dgr com um select que traz as informações que eu pretendo imprimir, depois mando via parameto ao cristal reports por meio de variáveis publicas como está
        Try
        Dim recibo As New CrystalReport1

        recibo.SetParameterValue(“@Escola”, escola)
        recibo.SetParameterValue(“@Telefone”, telefone)
        recibo.SetParameterValue(“@Email”, email)
        recibo.SetParameterValue(“@Nif”, nif)
        recibo.SetParameterValue(“@Rua”, local)
        recibo.SetParameterValue(“@Recibo”, reciboo)
        recibo.SetParameterValue(“@Anoletivo”, anulectivo)
        recibo.SetParameterValue(“@Aluno”, nomealuno)
        recibo.SetParameterValue(“@Processo”, codaluno)
        recibo.SetParameterValue(“@Curso”, curso)
        recibo.SetParameterValue(“@Turma”, turma)
        recibo.SetParameterValue(“@Periodo”, periodo)
        recibo.SetParameterValue(“@Classe”, classe)
        recibo.SetParameterValue(“@Sala”, sala)
        recibo.SetParameterValue(“@Drturma”, diretor)
        recibo.SetParameterValue(“@Encarregado”, encarrega)
        recibo.SetParameterValue(“@Fpagamento”, fpagamento)
        recibo.SetParameterValue(“@Banco”, banco)
        recibo.SetParameterValue(“@Bordero”, bordero)
        recibo.SetParameterValue(“@MesPago”, mespago)
        recibo.SetParameterValue(“@Qtd”, qtd)
        recibo.SetParameterValue(“@Multa”, multas)
        recibo.SetParameterValue(“@Ventregue”, valentrege)
        recibo.SetParameterValue(“@Desconto”, descontos)
        recibo.SetParameterValue(“@Totalpago”, totalapago)
        recibo.SetParameterValue(“@Troco”, troco)
        recibo.SetParameterValue(“@Datapaga”, datapagameto)
        recibo.SetParameterValue(“@DiadeUltimato”, diaultimato)
        recibo.SetParameterValue(“@Utilizador”, utilizador)
        recibo.SetParameterValue(“@MultaApagar”, valordemulta)
        CrystalReportViewer1.ReportSource = recibo
        CrystalReportViewer1.Refresh()

        Catch ex As Exception
        MsgBox(ex.Message)
        End Try

        O Problema destá é que não consigo trabalhar para fazer um relatório livre que dependa somente do parametro, no exemplo a cima eu não uso ela como meio de rastear no banco mais sim como preenchedor do relatório.

        • Valdemar Paulo disse:

          Eu tentei estudar este está resposta mais sem sucesso! Se você está linkando o banco directo no relatório, você precisa passar as informações do banco antes de exibir o relatório..
          Tem uns exemplos parecidos nesta thread de fórum:

          Neste comentário não encontre uma resposta clara, preciso de uma ajuda como passar as informações do banco antes de exibir o relatório via código eu estou a usar o Vb.net 2010..

          • andrealveslima disse:

            Olá Valdemar!

            Tente da seguinte maneira (antes de setar o ReportSource do seu controle do Crystal Reports):

            Dim crConnectionInfo As New ConnectionInfo()
            crConnectionInfo.ServerName = "nomeservidor"
            crConnectionInfo.DatabaseName = "nomebanco"
            crConnectionInfo.UserID = "usuario"
            crConnectionInfo.Password = "senha"
            
            For Each CrTable in seuReportDocument.Database.Tables
                CrTable.LogonInfo.ConnectionInfo = crConnectionInfo
                CrTable.ApplyLogOnInfo(CrTable.LogonInfo)
            Next
            

            Abraço!
            André Lima

  • Valdemar Paulo disse:

    Se for para criar crio um Crystal sem tipo?

  • Valdemar Paulo disse:

    Usei
    Dim conex = New SqlConnection(ConfigurationManager.ConnectionStrings(“CONEXAO”).ConnectionString)
    conex.Open()
    Dim crConnectionInfo As New ConnectionInfo()
    crConnectionInfo.ServerName = “SRV01\FR”
    crConnectionInfo.DatabaseName = “GestaoEscolar”
    crConnectionInfo.UserID = “FR”
    crConnectionInfo.Password = “Temp.1234”

    For Each CrTable In reportDocument1.Database.Tables
    CrTable.LogonInfo.ConnectionInfo = crConnectionInfo
    CrTable.ApplyLogOnInfo(CrTable.LogonInfo)
    Next
    no form que abri o relactorio e não tive sucesso no botão que o chama ou no proprio form…

    • andrealveslima disse:

      Olá Valdemar!

      Não teve sucesso quer dizer que o relatório continuou se comportando da maneira anterior? Qual é o comportamento exato que você está tendo ao colocar esse código antes do refresh do relatório?

      Abraço!
      André Lima

  • Andre Luiz Quintanilha disse:

    Olá André! Me tire uma dúvida: Qual seria a melhor maneira de distribuir junto com a aplicação utilizando o Click Once os arquivos .rdlc do reportviewer? A princípio a aplicação irá procurar os arquivos numa pasta padrão e, caso não os encontre abrirá uma caixa diálogo para o cliente localizar na rede. Porém como faço para os arquivos “caírem” nesta pasta padrão?
    Obrigado!

    • andrealveslima disse:

      Olá André!

      Com o ClickOnce você não tem controle onde a aplicação é instalada.. O ClickOnce instala a aplicação em uma pasta bem obscura dentro do diretório do usuário.. A solução nesse caso seria ajustar a aplicação para sempre pegar os relatórios diretamente do diretório da aplicação (ou de um sub-diretório da aplicação).. Aí você pode configurar no “Application Files” do ClickOnce que os arquivos rdlc devem ser distribuídos na instalação também..

      Abraço!
      André Lima

  • Leandro Cloqui disse:

    André tudo bem?
    Ótimo seu trabalho, aqui funcionou tudo e coloquei as dlls do reportviewer pra instalar junto na pasta do sistema e show, mas eu tentei colocar o runtime do report pra instalar junto mas não instala recebo uma mensagem de erro. Será que vc poderia explicar melhor como inserir esta linha de comando ‘/q:a /c:”install /qb /l”‘, no innosetup por gentileza

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *